Swift 正则表达式用法

Swift regular expression usage

我无法将此 Java 正则表达式转换为 swift:

^(?=.[a-z])(?=.[A-Z])(?=.*\d).{6,15}$

它基本上检查输入至少有一个大写字母,至少有一个数字,最小长度为 6 个字符,最大长度为 15。

要检查的输入来自 UITextField ,我有这个功能要检查:

func isValidPassword(candidate: String) -> Bool {
    let passwordRegex = "(?=.[a-z])(?=.[A-Z])(?=.*\d).{6,15}"

    return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluateWithObject(candidate)
}

然后,按照我的逻辑,我会做这样的事情:

if isValidPassword(textField.text) {
    println("password is good")
} else {
    println("password is wrong")
}

我总是收到错误的密码日志。

我什至尝试用这个 Cheat Sheet 修改表达式,但没有成功。

任何人都可以发现正则表达式中的缺陷吗?

我认为你的正则表达式是错误的。它应该是 (?=.*[a-z])(?=.*[A-Z])(?=.*\d).{6,15} - 注意 [a-z] 之前和 [A-Z] 之前的 *。它遵循您已应用于数字组的相同原则。

这仍然不符合您的描述,因为它也强制使用小写字母。您可能想删除第一个 (?=) 组或更改您的期望/描述。

您的正则表达式有误,请使用以下正则表达式:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{6,15}$

DEMO