我正在编制一份登记表。它具有以下要求:
我会像这样检查弦。
extension String {
var isValidUsername: Bool {
let predicate = NSPredicate(format: "SELF MATCHES %@ ", "^(?=.*[A-Za-z0-9!@#$%^&*()._-]).{5,16}$")
return predicate.evaluate(with: self)
}
}
现在有两个问题我可以进入空间,虽然我不应该。我可以使用列出的字符以外的字符。我怎么解决这个?
实际上,这里仍然可以使用正则表达式,因为只有两件事需要修复:
.
模式匹配除换行符字符以外的任何字符,因此可以匹配大量字符(?=.*[a-za-z0-9!@#$%^&*()._-])
只需要字符类中列出的除换行符以外的任何零个或多个字符之后至少有一个字符。若要仅允许lookahead中的字符,请使用lookahead字符类,而不是使用模式中的.
。注意锚是多余的,因为matchs
需要一个完整的字符串匹配。
您可以使用
extension String {
var isValidUsername: Bool {
let predicate = NSPredicate(format: "SELF MATCHES %@ ", "[A-Za-z0-9!@#$%^&*()._-]{5,16}")
return predicate.evaluate(with: self)
}
}