我正在开发注册表。它有以下要求:
我会像这样检查字符串。
extension String {
var isValidUsername: Bool {
let predicate = NSPredicate(format: "SELF MATCHES %@ ", "^(?=.*[A-Za-z0-9!@#$%^&*()._-]).{5,16}$")
return predicate.evaluate(with: self)
}
}
现在有两个问题我可以输入空格,但我不应该。我可以使用所列字符以外的字符。我该如何解决这个问题?
答案 0 :(得分:1)
实际上,这里仍然可以使用正则表达式,因为只有两件事需要解决:
.
模式匹配除换行符以外的任何字符,因此它可以匹配很多字符(?=.*[A-Za-z0-9!@#$%^&*()._-])
只需要在字符类中除换行符以外的零个或多个字符之后至少列出一个字符。要仅允许来自先行的字符,请在消费模式中使用先行字符类而不是 .
。注意锚点是多余的,因为 MATCHES
需要完整的字符串匹配。
您可以使用
修复代码extension String {
var isValidUsername: Bool {
let predicate = NSPredicate(format: "SELF MATCHES %@ ", "[A-Za-z0-9!@#$%^&*()._-]{5,16}")
return predicate.evaluate(with: self)
}
}