问题描述
在应用程序中,用户必须在此规则中输入密码。
- 8 到 20 个字符。
- 用户必须至少有两种组合(例如,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 (将#修改为@)