2

比方说,我有一个正则表达式来检查整个输入值的验证。例如,它是一个电子邮件输入框,当用户按 Enter 键时,我会检查它^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$是否是有效的电子邮件地址。

我想要实现的是,我也想拦截输入的字符,并检查每个输入的字符,看看该字符是否也是有效字符。我可以通过添加一个额外的正则表达式来做到这一点,例如,[A-Z0-9._%+-] 但这不是我想要的。

有没有办法从给定的正则表达式中提取尽可能广泛的可接受字符?那么在上面的示例中,我可以通过编程方式提取原始正则表达式(即) 定义的所有有效字符吗?^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

我将不胜感激任何帮助或提示。

PS这是用Objective-C编写的iOS项目。

4

1 回答 1

1

如果你不介意写半个正则表达式解析器,当然可以。您必须能够区分文字和元字符并展开/合并所有字符类(包括否定字符类和嵌套否定字符类,如果您的正则表达式支持它们)。

如果NSRegularExpressions没有一些方便的方法,我无法想象否则怎么可能。想想看^。当它在字符类之外时,它是一个可以忽略的元字符。如果它在字符类中,它是一个元字符,它否定字符类,除非它不是第一个字符。-是字符类中的元字符,除非它是第一个字符、最后一个字符或紧随另一个字符范围(取决于正则表达式的风格)。而且我什至没有谈论转义字符。

我不知道NSRegularExpressions,但有些风格还支持嵌套字符类(如[a-z[^aeiou]]所有辅音)。我想你明白了我的意思。

于 2012-11-14T15:08:55.317 回答