我有一个密码匹配要求,我不想在密码验证中包括德语元音变音。当前匹配标准为:
1.一个小写
1.一个大写字母
1.一位数
1.最少10个字符
我创建了一个regex如下:
func matchPasswordWith(_ text: String) -> Bool {
let predicate = NSPredicate(format: "SELF MATCHES %@","^(?=.*?[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[a-zA-Z]).{10,}$")
return predicate.evaluate(with: text)
}
但是当用户输入任何元音变音(e.g. ü,ä,ī,ß)时,上面的正则表达式返回true,但我想排除元音变音匹配。
请指出我在这里做错了什么。
2条答案
按热度按时间mqkwyuun1#
您可以使用 * 字符类交集 * 对 * 字符类 * 中的值求反。
语法是
&&[]
,必须放在 character class 的末尾。此外,你可以减少你的模式。
(?i)
将切换到不区分大小写模式。这里有一些例子。
这些会匹配。
而且,这些不会。
pokxtpni2#
您可以在密码匹配中排除变音符号,方法是包含所有您希望包含的非变音符号字符。将
(?=.*[a-zA-Z]).{10,}$
替换为类似[A-Za-z0-9]{10,}$
的内容[A-Za-z0-9]{10,}
检查所有字符是否为字母或数字,并且至少有10个字符。显然,它也排除了其他特殊字符,但您可以始终将这些字符添加到字符集中,例如:[A-Za-z0-9@#$%^&*]{10,}
.或者你想包含的任何其他字符。