识别正则表达式模式的类型

Identify type of regex pattern

在我的应用程序中,我根据服务器提供的响应添加了编辑文本。对于每个 edittext 服务器还提供正则表达式模式来匹配。我能够成功地匹配模式并进行验证。但我想识别正则表达式模式的类型,以便我可以根据 edittext 应该接受的值打开键盘。

例如, 如果 edittext 应该接受电子邮件地址,那么带有 @ 符号的键盘会打开,如果 edittext 接受数值,它应该打开数字键盘。

是否有任何库可以从其正则表达式模式 return 类型,例如 "Email"、"Number" 等,因为可以有几种不同类型的正则表达式模式?

编辑:我知道如何为 edittext 设置输入类型,但我需要从正则表达式模式中找出类型。我无法在服务器中进行更改,我必须在客户端处理此问题。

很可能没有。原因是——没有办法确定。你能想到的任何东西都是启发式的。

启发式一:

  1. 如果模式查找包含 的内容,后跟 @ 符号,然后是包含 的内容点 - 这是电子邮件验证。
  2. 如果模式仅包含 \d,或数字范围 ([1-5]),或单个数字 (7) 加上重复元字符 (?*, +, {4, 12}), 这是一个数字验证。
  3. 如果模式包含 \w 且没有 @ 符号,则为常规文本。
  4. 本着同样的精神继续。

    • +高控。当您发现您的结果在某些情况下不准确时,您可以随时添加新的猜测
    • - 需要更多代码才能实现
    • - 需要非常了解正则表达式

启发式二:

使用您知道其类型的字符串列表,并尝试将它们与正则表达式匹配。又名,对于电子邮件尝试 example@gmail.com.

  • + 易于实施。小概率问题逻辑
  • - 最少的控制。如果服务器为您提供不同域的电子邮件模式,您无法猜测这是一个电子邮件模式,除非您知道所有可能的域

启发式三:

使用可以从正则表达式生成示例字符串并将它们与您自己的正则表达式匹配以确定类型的库。这是 Java and another one for JavaScript.

的一个
  • + 很好地结合了高度控制和易于实施
  • - 你仍然需要编写自己的正则表达式(不像第二个启发式那么简单)
  • - 人们有时会编写允许误报的正则表达式。因此,生成的字符串可能不是完美的格式(没有第一个启发式那么多控制)


正则表达式是静态的吗?

  • 如果是 - 你应该制作一个映射并使用它。
  • 如果不是 - 使用上述方法之一的启发式方法,并随着时间的推移改进它,因为您获得了更多关于生成的正则表达式通常看起来如何的统计数据。