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
#"^(((?=.*[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操场”代码中运行时产生相同的结果。