微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios swift 正则表达式结果不等于操场

如何解决ios swift 正则表达式结果不等于操场

在应用程序中,用户必须在此规则中输入密码。

  1. 8 到 20 个字符。
  2. 用户必须至少有两种组合(例如,upper+lower、num+eng、...)

我正在使用下面的正则表达式。

#"^(((?=.*[a-z]{1})(?=.*[A-Z]{1}))|((?=.*\d{1})(?=.*[a-zA-Z]{1}))|((?=.*\W{1})(?=.*[a-zA-Z]{1}))|((?=.*\d{1})(?=.*\W{1}))).{8,20}$"#

正则表达式测试函数就是这个。

public extension String {
    func regexMatches(regex : String) -> Bool {
        let predicate = nspredicate(format: "SELF MATCHES %@",regex)
        return predicate.evaluate(with: self)
    }
}

这就是事情的情况。

在视图控制器中,

private func validatePassword(password : String) -> Bool {
    return password.regexMatches(regex: #"^(((?=.*[a-z]{1})(?=.*[A-Z]{1}))|((?=.*\d{1})(?=.*[a-zA-Z]{1}))|((?=.*\W{1})(?=.*[a-zA-Z]{1}))|((?=.*\d{1})(?=.*\W{1}))).{8,20}$"#)
}

在操场上,

private func validatePassword(password : String) -> Bool {
    return password.regexMatches(regex: #"^(((?=.*[a-z]{1})(?=.*[A-Z]{1}))|((?=.*\d{1})(?=.*[a-zA-Z]{1}))|((?=.*\W{1})(?=.*[a-zA-Z]{1}))|((?=.*\d{1})(?=.*\W{1}))).{8,20}$"#)
}

并称之为,

if let password = self.data["password"],let newPassword = self.data["newPassword"] {
    if password != newPassword {
        return
    }
        
    if self.validatePassword(password: String(password)) != false {
        request["password"] = password
    }
    else {
        return
    }
}

如果将参数 abcdabcd 传递给 validatePassword(),它应该是 false

但是viewcontroller 的结果是true,playground 的结果是false

这些情况有什么不同?

+++ 添加更多代码+++

extension ModifyAccountPagerViewController {
@IBAction
func movetoPrev(_ sender : Any) {
    self.navigationController?.popViewController(animated: true)
}

@IBAction
func validation(_ sender : UIButton) {
    if self.data.isEmpty != false {
        return
    }
    
    var request = Dictionary<String,String>()
    
    if let name = self.data["name"] {
        if self.validateName(name: String(name)) != false {
            request["name"] = name
        }
        else {
            return
        }
    }
    
    if let password = self.data["password"],let newPassword = self.data["newPassword"] {
        if password != newPassword {
            return
        }
        
        if self.validatePassword(password: String(password)) != false {
            request["password"] = password.sha256
            Log.d("password is validated!")
        }
        else {
            return
        }
    }
    
    if let phoneNumber = self.data["phoneNumber"] {
        if self.validatePhoneNumber(phoneNumber: String(phoneNumber)) != false {
            request["phoneNumber"] = phoneNumber
        }
        else {
            return
        }
    }
    
    if request.isEmpty != false {
        return
    }
    
    // self.changeAccountInfo(request: request)
}


private func validateName(name : String) -> Bool {
    return name.regexMatches(regex: #"^[ㄱ-ㅎ|가-힣|a-z|A-Z|*\s]+$"#)
}

private func validatePassword(password : String) -> Bool {
    return password.regexMatches(regex: #"^(((?=.*[a-z]{1})(?=.*[A-Z]{1}))|((?=.*\d{1})(?=.*[a-zA-Z]{1}))|((?=.*\W{1})(?=.*[a-zA-Z]{1}))|((?=.*\d{1})(?=.*\W{1}))).{8,20}$"#)
}

private func validatePhoneNumber(phoneNumber : String) -> Bool {
    return phoneNumber.regexMatches(regex: #"^01(?:0|1|[6-9])[.-]?(\d{3}|\d{4})[.-]?(\d{4})$"#)
}

private func changeAccountInfo(request : Dictionary<String,String>) {
    // MARK: Add API here.
}

}

数据为 { "password" : "abcdabcd","newPassword" : "abcdabcd" }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?