识别正则expression式模式的types

在我的应用程序中,我添加了基于服务器提供的响应的edittext。 对于每个edittext服务器也提供了正则expression式来匹配。 我能够成功地匹配模式并进行validation。 但我想识别正则expression式的types,以便我可以打开键盘根据值edittext应该接受。

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

是否有任何库可以从正则expression式返回types,如正则expression式中的“电子邮件”,“数字”等,因为可能有几种不同types的正则expression式模式?

编辑:我知道如何设置edittext的inputtypes,但我需要从正则expression式模式找出types。 我不能在服务器上进行更改,我必须在客户端处理这个。

Solutions Collecting From Web of "识别正则expression式模式的types"

最有可能不是一个。 原因是 – 没有办法确定。 任何你能想到的都是启发式的。

启发式的:

  1. 如果模式寻找包含点的东西,然后是@符号,然后是包含的东西 – 这是一个电子邮件validation。
  2. 如果模式只包含\d或数字范围( [1-5] )或单个数字( 7 )加上重复元字符( ?*+{4, 12} ),则为数字validation。
  3. 如果模式包含\w和没有@符号,这是一个正则文本。
  4. 继续以同样的精神。

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

启发式的二:

使用一个string列表,你知道它的types,并尝试将它们与正则expression式匹配。 又名,电子邮件尝试example@gmail.com

  • +易于实施。 小机会有问题的逻辑
  • – 最less的控制。 如果服务器给你不同的域的电子邮件模式,你不能猜测这是一个电子邮件模式,除非你知道所有可能的域名

启发式三:

使用可以从正则expression式生成示例string的库,并将它们与您自己的正则expression式匹配以确定types。 这里是一个Java和另一个JavaScript 。

  • +提供了高度控制和简单实施的完美结合
  • – 你仍然必须编写自己的正则expression式(不像第二个启发式那样微不足道)
  • – 人们有时会编写正则expression式,允许一些误报。 因此,生成的string可能不是完美的格式(没有像第一个启发式那样多的控制)

正则expression式是静态的吗?

  • 如果是的话 – 你应该做一个映射并使用它。
  • 如果没有 – 使用类似上述的启发式方法,并随着时间的推移对其进行改进,以获得有关生成的正则expression式通常看起来如何的更多统计信息。