Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Passport系列实时输入验证:NSPredicate与正则表达式问题_Ios_Swift_Regex_Validation - Fatal编程技术网

Ios Passport系列实时输入验证:NSPredicate与正则表达式问题

Ios Passport系列实时输入验证:NSPredicate与正则表达式问题,ios,swift,regex,validation,Ios,Swift,Regex,Validation,我刚刚发现带有所需字符数的正则表达式不起作用 我对NSPredicate使用了标准方法,如下所示: let validatedString = NSPredicate(format:"SELF MATCHES %@", validationExpresion) return validatedString.evaluate(with: text) 其中,validationExpression是我的正则表达式,text只是一个字符串 我尝试了^[A-Z]+$,一切正常,但在

我刚刚发现带有所需字符数的正则表达式不起作用

我对
NSPredicate
使用了标准方法,如下所示:

let validatedString = NSPredicate(format:"SELF MATCHES %@", validationExpresion)
return validatedString.evaluate(with: text)
其中,
validationExpression
是我的正则表达式,
text
只是一个字符串

我尝试了
^[A-Z]+$
,一切正常,但在添加范围
^[A-Z]{6}+$
后,它根本不起作用


同时,这两种表达方式都能很好地发挥作用。我错在哪里?

要使用正则表达式实现实时输入验证,必须确保它能够匹配从第一个字符开始的所需格式字符串,并且每个后续字符都应该是可选的,但只有在前面的字符与模式匹配时,才允许使用每个后续字符

在这种情况下,您可以使用

^[A-Z](?:[A-Z][0-9]{0,6})?$
它将匹配字符串,如

A
AB
AB1
AB12
AB123
AB1234
AB12345
AB123456
请参阅和:

正则表达式详细信息

  • ^
    -字符串的开头(不需要使用
    匹配项
    ,因为它需要完整的字符串匹配,但可以使用)
  • [A-Z]
    -大写ASCII字母
  • (?:[A-Z][0-9]{0,6})
    -可选的非捕获组匹配
    • [A-Z]
      -大写ASCII字母
    • [0-9]{0,6}
      -零到六位数
  • $
    -字符串结尾(匹配的
    不需要)

注意
{6}+
=
{6}
表示出现6次。您应该添加类似{0,6}的范围并删除+Man,非常感谢,它很有效!有{0,6}而没有“+”。但是我尝试验证passport系列,它是XX000000格式,并且^[A-Z]{0,2}?[0-9]{0,6}$regex首先允许数字,但是我只想要[A-Z]。我错在哪里?它用于实时输入验证吗?你需要
^[A-Z](?:[A-Z][0-9]{0,6})$
然后。^[A-Z](?:[A-Z][0-9]{0,6})$非常好用!谢谢你,伙计!这是我见过的最好的解释!谢谢