无法在 swift 中进行正则表达式匹配 - iOS



以下是我的代码:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let prospectiveText = ((textField.text ?? "") as NSString).replacingCharacters(in: range, with: string)
        if prospectiveText.validateAsPerRegExpression(regExpression: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789[]{}#%^*+=_\|~<>€£¥•-/:;()$&@".,?!'") == false {
            return false
        }
        return true
}
extension String {
    func validateAsPerRegExpression(regExpression: String) -> Bool {
        let floatExPredicate = NSPredicate(format:"SELF MATCHES %@", regExpression)
        return floatExPredicate.evaluate(with: self)
    }
}

获得以下崩溃:

***终止应用程序由于未被发现的例外" nsinternalInconSistencyException",原因:'无法进行正则匹配, 原因:无法打开模式u_regex_invalid_range(字符串E,模式 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 [] 情况0,佳能0('

我认为我以错误的方式形成正则表达方式,在修复程序上有任何想法吗?

实际上,我的目的是避免用户从键盘输入任何其他语言输入,但是正常键盘中的所有键。如果有更好的方法,请告诉我。谢谢。

问题是您的正则。您需要逃脱正则标识符,否则,编译器试图从中制成一个公式并失败。如果您只想接受具有特殊字符的英语字符,请使用此

[A-ZA-Z0-9 [] {}#%^* = _ |〜&lt;>€£¥• -/:;(($']

这仅一次匹配一个字符。如果要匹配一个或多个字符,即整个字符串,请在表达式结束时使用A (一个或多个匹配(或 *(零或更多匹配(。

[A-ZA-Z0-9 [] {}#%^* = _ |〜&lt;>€£¥• -/:;(($']

这将匹配一个或多个字符(非空字符串(。为了将来,您可以使用此网站Regexr,这将为您验证您的正则发行。

最新更新