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

ios swift正则表达式的结果不等于,ios,swift,regex,nsregularexpression,Ios,Swift,Regex,Nsregularexpression,在应用程序中,用户必须使用此规则中的密码 8到20个字符 用户必须至少有两种组合(ex、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 extens

在应用程序中,用户必须使用此规则中的密码

  • 8到20个字符
  • 用户必须至少有两种组合(ex、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)
        }
    }
    
    情况就是这样

    在viewcontroller中

    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
    ,游乐场的结果是
    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.
    }
    
    扩展名ModifyAccountPagerViewController{
    @IBAction
    func moveToPrev(uu发送方:任何){
    self.navigationController?.popViewController(动画:true)
    }
    @IBAction
    func验证(u发送方:UIButton){
    如果self.data.isEmpty!=false{
    返回
    }
    var请求=字典()
    如果let name=self.data[“name”]{
    如果self.validateName(名称:字符串(名称))!=false{
    请求[“名称”]=名称
    }
    否则{
    返回
    }
    }
    如果让password=self.data[“password”],则让newPassword=self.data[“newPassword”]{
    如果密码!=newPassword{
    返回
    }
    如果self.validatePassword(密码:字符串(密码))!=false{
    请求[“密码”]=password.sha256
    Log.d(“密码已验证!”)
    }
    否则{
    返回
    }
    }
    如果让phoneNumber=self.data[“phoneNumber”]{
    如果self.validatePhoneNumber(phoneNumber:String(phoneNumber))!=false{
    请求[“电话号码”]=电话号码
    }
    否则{
    返回
    }
    }
    if request.isEmpty!=false{
    返回
    }
    //self.changeAccountInfo(请求:请求)
    }
    private func validateName(名称:String)->Bool{
    返回名称。regexMatches(regex:#”^[ㄱ-ㅎ|가-힣|a-z | a-z |*\s]+$“#)
    }
    private func validatePassword(密码:字符串)->Bool{
    返回password.regexMatches(regex:#“^(((?=.[a-z]{1})(?=.[a-z]{1}))|((?=.*\d{1})(?=..[a-zA-z]{1}))|((?=..[a-zA-z]{1})(?=.[a-zA-z]{1}))|(?=..[a-zA-z]{1}))(?=..[[a-zA-z]{1}]){1}){20}
    }
    private func validatePhoneNumber(电话号码:字符串)->Bool{
    返回phoneNumber.regexMatches(regex:#“^01(?:0 | 1 |[6-9])[.-]?(\d{3}\d{4})[.-]?(\d{4})$”)
    }
    private func changeAccountInfo(请求:字典){
    //马克:在这里添加API。
    }
    
    }


    数据是
    {“password”:“abcdabcd”,“newPassword”:“abcdabcd”}

    您到底在测试什么,只测试问题末尾的函数还是整个代码?@JoakimDanielson I'测试函数
    验证密码(password)
    。它给出了不同的结果。好吧,我只是想知道,因为你还包括了那个额外的代码。@JoakimDanielson代码被添加到了帖子中。如果用户单击“下一步”按钮,则调用“
    @iAction func验证”(\uSender:UIButton)
    ”。我正在操场上测试相同的代码,它工作正常。@01hanst-我认为问题不在于你的
    validatePassword()
    函数。。。此代码:。。。在操场、模拟器、设备以及底部的“仅限非VC操场”代码中运行时产生相同的结果。