假设我有一个正则表达式,它检查输入值作为整个的有效性。例如,这是一个电子邮件输入框,当用户点击Enter时,我会根据^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
对其进行检查,以查看其是否为有效的电子邮件地址。
我要实现的是,我也想拦截字符输入,并检查每个输入字符以查看该字符是否也是有效字符。我可以通过添加一个额外的正则表达式来做到这一点,例如[A-Z0-9._%+-]
,但这不是我想要的。
有没有一种方法可以从给定的正则表达式中提取尽可能广泛的可接受字符?因此,在上面的示例中,我可以通过编程方式提取原始正则表达式(即^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
)定义的所有有效字符吗?
我将不胜感激任何帮助或提示。
附言这是用Objective-C编写的iOS项目。
最佳答案
当然,如果您不介意编写一半的正则表达式解析器。您将必须能够将文字与元字符区分开,并能够展开/合并所有字符类(包括正则表达式支持的否定字符类和嵌套否定字符类)。
如果NSRegularExpressions
没有附带某种便捷方法,我将无法想象否则会怎样。考虑一下^
。当它在字符类之外时,它是一个您可以忽略的元字符。如果它在字符类中,则它是一个元字符,它将否定字符类,除非不是第一个字符。 -
是字符类中的一个元字符,除非它是第一个字符,最后一个字符或紧接另一个字符范围(取决于正则表达式的风格)。而且我什至没有谈论逃脱的角色。
我不了解NSRegularExpressions
,但是有些口味还支持嵌套字符类(例如所有辅音的[a-z[^aeiou]]
)。我认为您可以解决这个问题。