我想验证密码,以包括至少1个阿拉伯文或英文字母和至少1个阿拉伯文或英文数字,并且密码至少为8位,我原来只为英语编写的代码如下:
let passwordRegex = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$"
if (!NSPredicate(format:"SELF MATCHES %@",passwordRegex).evaluate(with: password)){
return false
}
然后我找到了阿拉伯字符和数字的答案,然后我试图像这样合并两者:
let passwordRegex = "^(?=.*[A-Za-zء-ي])(?=.*٠-٩\\d)[A-Za-zء-ي٠-٩\\d]{8,}$"
if (!NSPredicate(format:"SELF MATCHES %@",passwordRegex).evaluate(with: password)){
return false
}
请告知发生了什么问题,提前谢谢
由于英文或阿拉伯字母正则表达式(如您所链接的答案中所述,也请参见此答案)也是[a-zA-Za-z\u0621-\u064A]
,因此[0-9\u0660-\u0669]
您可以使用英文或阿拉伯数字正则表达式
let passwordRegex = "^(?=.*[a-zA-Z\\u0621-\\u064A])(?=.*[0-9\\u0660-\\u0669])[a-zA-Za-z\\u0621-\\u064A0-9\\u0660-\\u0669]{8,}$"
注意:您不需要外部^
和$
锚,因为MATCHES
需要模式以匹配整个字符串输入。
将阿拉伯字母与Swift中使用的ICU正则表达式匹配的另一种方法是使用[\p{L}&&[\p{script=Arabic}]]
(它是字符类中的交集,它匹配除阿拉伯字符集以外的任何字母)。与数字相同:[\p{N}&&[\p{script=Arabic}]]
。然后,正则表达式将看起来像
let passwordRegex = "^(?=.*[\\p{L}&&[\\p{script=Arabic}A-Za-z]])(?=.*[\\p{N}&&[\\p{script=Arabic}0-9]])[\\p{L}\\p{N}&&[\\p{script=Arabic}a-zA-Z0-9]]{8,}$"
所以在这里
[\\p{L}&&[\\p{script=Arabic}A-Za-z]]
-任何字母,但应属于ASCII字母或阿拉伯文字[\\p{N}&&[\\p{script=Arabic}0-9]]
-除0-9
范围或阿拉伯文字外的任何数字[\\p{L}\\p{N}&&[\\p{script=Arabic}a-zA-Z0-9]]
-任何字母或数字,但仅从ASCII 0-9
,A-Z
,a-z
和阿拉伯文字。还要注意,为了匹配任何字母,您可以使用\p{L}
并匹配您可以使用的任何数字\d
(它们在ICU库中支持Unicode)。因此,如果字母或数字是阿拉伯语,英语,希腊语或其他字母,则*如果t无关紧要,则可以使用
let passwordRegex = "^(?=.*\\p{L})(?=.*\\d)[\\p{L}\\d]{8,}$"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句