我只是发现带有所需字符数的正则表达式不起作用。
我对NSPredicate
使用了标准方法,如下所示:
let validatedString = NSPredicate(format:"SELF MATCHES %@", validationExpresion)
return validatedString.evaluate(with: text)
其中validationExpression
是我的正则表达式,而text
只是一个字符串。我尝试了
^[A-Z]+$
,但一切正常,但是在添加范围^[A-Z]{6}+$
之后,它根本不起作用。同时,这两个表达式在https://regex101.com上都可以正常工作。我哪里错了?
最佳答案
要使用正则表达式实现实时输入验证,您必须确保它可以与所需的格式字符串(从第一个字符开始)匹配,并且每个后续字符都应是可选的,但仅当前面的字符与模式。
在这种情况下,您可以使用
^[A-Z](?:[A-Z][0-9]{0,6})?$
它将匹配像A
AB
AB1
AB12
AB123
AB1234
AB12345
AB123456
参见regex demo和regex graph:正则表达式详细信息
^
-字符串的开头(MATCHES
不需要,因为它需要完整的字符串匹配,但可以使用)[A-Z]
-大写ASCII字母(?:[A-Z][0-9]{0,6})?
-可选的非捕获组匹配[A-Z]
-大写ASCII字母[0-9]{0,6}
-零到六位数$
-字符串的结尾(MATCHES
不需要)。 关于ios - Passport系列实时输入验证:带有正则表达式问题的NSPredicate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63011795/