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

时间:2015-08-11 15:56:19

标签: android regex android-edittext android-inputtype

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

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

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

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

1 个答案:

答案 0 :(得分:8)

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

启发式:

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

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

    使用您知道其类型的字符串列表,并尝试将它们与正则表达式匹配。 Aka,电子邮件尝试\w

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

    启发式三:

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

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

    <小时/>

    正则表达式是静态的吗?

    • 如果是 - 您应该进行映射并使用它。
    • 如果不是 - 使用上述其中一种启发式方法并随着时间的推移对其进行改进,因为您可以获得有关生成的正则表达式通常如何显示的更多统计信息。