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

15
在我的应用程序中,我基于服务器提供的响应添加了edittext。对于每个edittext,服务器也提供了正则表达式模式进行匹配。我能够成功地匹配模式并进行验证。但是,我想识别正则表达式模式的类型,以便根据值edittext应该接受来打开键盘。
例如,如果edittext应该接受电子邮件地址,则打开带有@符号的键盘,如果edittext接受数字值,则应打开数字键盘。
是否有任何库可以从其正则表达式模式返回类型,例如“电子邮件”,“数字”等,因为可能会有几种不同类型的正则表达式模式?
编辑:我知道如何为edittext设置输入类型,但我需要从正则表达式模式中找到类型。我无法更改服务器上的内容,我必须在客户端处理此问题。

你是想根据某个正则表达式模式来改变输入类型吗? - andrewdleach
是的,我的正则表达式模式将来自服务器,并且每个编辑文本框可能有不同的正则表达式模式。 - baldguy
所以,你想知道正则表达式模式还是想知道如何更改输入类型以便键盘会改变? - andrewdleach
我知道如何更改键盘的输入类型,但首先我需要从正则表达式模式中确定该edittext的理想值是什么,然后根据此设置输入类型。因此,我需要一种方法来帮助我从正则表达式模式中确定它是电子邮件还是电话号码。 - baldguy
@Rahil2952 我会分析你从这些第三方服务中获取的内容,并在你的应用程序中插入一个预定义列表,该列表将路由到你可能获得的每个正则表达式。这也意味着你需要一个默认行为来处理正则表达式不在列表中的情况。 - HamZa
显示剩余2条评论
1个回答

9
很可能没有确定的方法。原因是-没有办法确定。任何你能想到的都是启发式的。
启发式一: 1.如果该模式查找包含一个点,后跟@符号,后跟包含一个点的内容,则为电子邮件验证。 2.如果该模式仅包含\d或数字范围([1-5]),或单个数字(7)加上重复元字符(?,*,+,{4,12}),则为数字验证。 3.如果该模式包含\w而没有@符号,则为常规文本。 4.继续以同样的精神。 +高控制。当您发现某些情况下结果不准确时,可以随时添加新的猜测 -需要更多代码来实现 -需要非常好的正则表达式知识
启发式二:
使用一个字符串列表,你可以知道它们的类型并尝试将它们与正则表达式匹配。例如,对于电子邮件,请尝试example@gmail.com
  • +易于实现。逻辑问题的可能性较小
  • -控制最少。如果服务器为不同域提供电子邮件模式,则无法猜测这是电子邮件模式,除非您知道所有可能的域

启发式三:

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

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


正则表达式是静态的吗?

  • 如果是 - 您应该创建一个映射并使用它。
  • 如果不是 - 使用类似上述方法中的启发式算法,并随着您获取有关生成的正则表达式通常是什么样子的更多统计数据而改进它。

1
@ndn 您的答案并没有提供我所寻找的确切解决方案,但是您的答案最接近我所需的,因此我会授予您奖励。感谢您的所有帮助。 - baldguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接