比方说,我有一个正则表达式,用于检查输入值的整体验证。例如,它是一个电子邮件输入框,当用户点击进入时,我会针对^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
进行检查,看看它是否是有效的电子邮件地址。
我想要实现的是,我也想拦截字符输入,并检查每个输入字符以查看该字符是否也是有效字符。我可以通过添加额外的正则表达式来完成此操作,例如[A-Z0-9._%+-]
但这不是我想要的。
有没有办法从给定的正则表达式中提取尽可能广泛的可接受字符?因此,在上面的示例中,我是否可以提取由原始正则表达式定义的所有有效字符(例如^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
)以编程方式?
我将不胜感激任何帮助或提示。
P.S。这是用Objective-C编写的iOS项目。
答案 0 :(得分:1)
如果你不介意写半个正则表达式解析器,当然。您必须能够区分文字和元字符,并展开/合并所有字符类(包括否定字符类和嵌套否定字符类,如果正则表达式支持它们)。
如果NSRegularExpressions
没有附带一些方便的方法,我无法想象它会如何可能。试想^
。当它在字符类之外时,它是一个可以忽略的元字符。如果它在一个字符类中,它是一个元字符,它会否定字符类,除非它不是第一个字符。 -
是字符类中的元字符,除非它是第一个字符,最后一个字符,或者在另一个字符范围之后(取决于正则表达式的味道)。而且我甚至都没有谈论转义字符。
我不知道NSRegularExpressions
,但有些风格也支持嵌套字符类(如所有辅音的[a-z[^aeiou]]
)。我想你会得到我的目标。