我只是发现带有所需字符数的正则表达式不起作用。
我对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 demoregex graph:
ios - Passport系列实时输入验证:带有正则表达式问题的NSPredicate-LMLPHP
正则表达式详细信息
  • ^-字符串的开头(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/

    10-14 21:08
    查看更多