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

Rah*_*952 15 regex android android-edittext android-inputtype

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

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

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

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

ndn*_*kov 9

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

启发式:

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

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

启发式二:

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

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

启发式三:

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

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


正则表达式是静态的吗?

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