15

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

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

是否有任何库可以从正则表达式返回类型,例如“电子邮件”、“数字”等,因为可以有几种不同类型的正则表达式模式?

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

4

1 回答 1

9

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

启发式一:

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

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

启发式二:

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

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

启发式三:

使用可以从正则表达式生成示例字符串并将它们与您自己的正则表达式匹配以确定类型的库。这是一个用于Java和另一个用于JavaScript的。

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


正则表达式是静态的吗?

  • 如果是 - 你应该做一个映射并使用它。
  • 如果没有 - 使用类似上述之一的启发式方法并随着时间的推移改进它,因为您可以获得更多关于生成的正则表达式通常外观的统计信息。
于 2015-08-13T21:25:11.847 回答