Ios 使用正则表达式进行Xcode/swift密码验证
我刚刚听说了这个正则表达式,正在努力让它发挥作用 我的代码:Ios 使用正则表达式进行Xcode/swift密码验证,ios,regex,swift,xcode,Ios,Regex,Swift,Xcode,我刚刚听说了这个正则表达式,正在努力让它发挥作用 我的代码: func isPasswordValid(_ Password : String) -> Bool{ let Password = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z](?=.*[0-9].{>8}$") return Password.evaluate(with: Password) } @IBAction func Register(_
func isPasswordValid(_ Password : String) -> Bool{
let Password = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z](?=.*[0-9].{>8}$")
return Password.evaluate(with: Password)
}
@IBAction func Register(_ sender: UIButton) {
if Username.text == "" {
Error.text = "Email må ikke være tom";
}
if Username.text != "" {
Error.text = ""
}
if Password.text == "" {
Error2.text = "Password må ikke være tom"
}
if Password.text != "" {
Error2.text = ""
}
if Password.text != repeatPassword.text || repeatPassword.text == "" {
Error3.text = "Password skal være det samme"
}
if Password.text == repeatPassword.text && repeatPassword.text != "" {
Error3.text = ""
}
if Password.text! == repeatPassword.text && Username.text != "" {
Auth.auth().createUser(withEmail: Username.text!, password: Password.text!) { (User, Error) in
self.performSegue(withIdentifier: "goToSignIn", sender: self)
}
}
}
当我运行它时,它会在返回状态下生成一个断点。我想我需要点什么?
有人能帮忙吗
func isPasswordValid(_ Password : String) -> Bool{
let Password = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z](?=.*[0-9].{>8}$")
return Password.evaluate(with: Password)
}
我怀疑您的函数参数与谓词变量名冲突,请尝试以下操作:
func isPasswordValid(_ password : String) -> Bool{
let predicate = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z](?=.*[0-9].{>8}$")
return predicate.evaluate(with: password)
}
@IBAction func Register(_ sender: UIButton) {
let username = self.username.text.flatMap { $0.isEmpty ? nil : $0 }
let password = self.password.text.flatMap { $0.isEmpty ? nil : $0 }
let repeat = self.repeatPassword.text.flatMap { $0 == password }
error.text = username == nil ? "Email må ikke være tom" : ""
error2.text = password == nil ? "Password må ikke være tom" : ""
error3.text = repeatPassword == nil ? "Password skal være det samme" : ""
guard username != nil, repeat != nil else { return }
Auth.auth().createUser(withEmail: username!, password: password!) { (user, error) in
self.performSegue(withIdentifier: "goToSignIn", sender: self)
}
}
我怀疑您的函数参数与谓词变量名冲突,请尝试以下操作:
func isPasswordValid(_ password : String) -> Bool{
let predicate = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z](?=.*[0-9].{>8}$")
return predicate.evaluate(with: password)
}
@IBAction func Register(_ sender: UIButton) {
let username = self.username.text.flatMap { $0.isEmpty ? nil : $0 }
let password = self.password.text.flatMap { $0.isEmpty ? nil : $0 }
let repeat = self.repeatPassword.text.flatMap { $0 == password }
error.text = username == nil ? "Email må ikke være tom" : ""
error2.text = password == nil ? "Password må ikke være tom" : ""
error3.text = repeatPassword == nil ? "Password skal være det samme" : ""
guard username != nil, repeat != nil else { return }
Auth.auth().createUser(withEmail: username!, password: password!) { (user, error) in
self.performSegue(withIdentifier: "goToSignIn", sender: self)
}
}
{>8}
在正则表达式中无效,请改用:
let Password = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z])(?=.*[0-9]).{8,}$")
# close lookahead __^ __^ ^^^^^
{>8}
在正则表达式中无效,请改用:
let Password = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z])(?=.*[0-9]).{8,}$")
# close lookahead __^ __^ ^^^^^
斯威夫特5
func isValidPassword(_ password:String) -> Bool {
if(password.count > 7 && password.count < 17) {
} else {
return false
}
let nonUpperCase = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZ").inverted
let letters = password.components(separatedBy: nonUpperCase)
let strUpper: String = letters.joined()
let smallLetterRegEx = ".*[a-z]+.*"
let samlltest = NSPredicate(format:"SELF MATCHES %@", smallLetterRegEx)
let smallresult = samlltest.evaluate(with: password)
let numberRegEx = ".*[0-9]+.*"
let numbertest = NSPredicate(format:"SELF MATCHES %@", numberRegEx)
let numberresult = numbertest.evaluate(with: password)
let regex = try! NSRegularExpression(pattern: ".*[^A-Za-z0-9].*", options: NSRegularExpression.Options())
var isSpecial :Bool = false
if regex.firstMatch(in: password, options: NSRegularExpression.MatchingOptions(), range:NSMakeRange(0, password.count)) != nil {
print("could not handle special characters")
isSpecial = true
}else{
isSpecial = false
}
return (strUpper.count >= 1) && smallresult && numberresult && isSpecial
}
func isValidPassword(u密码:String)->Bool{
如果(password.count>7&&password.count<17){
}否则{
返回错误
}
让非大写=字符集(字符sin:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”)。反转
让字母=password.components(分隔符:非大写)
让strUpper:String=letters.joined()
设smalllettergex=“.[a-z]+.*”
让samlltest=NSPredicate(格式:“自匹配%@”,smalllettergex)
让smallresult=samlltest.evaluate(使用:密码)
让numberRegEx=“.[0-9]+.*”
让numbertest=NSPredicate(格式:“自匹配%@”,numberRegEx)
让numberresult=numbertest.evaluate(使用:密码)
让regex=try!NSRegularExpression(模式:“.[^A-Za-z0-9].*”,选项:NSRegularExpression.options())
var isSpecial:Bool=false
如果regex.firstMatch(in:password,options:NSRegularExpression.MatchingOptions(),range:NSMakeRange(0,password.count))!=nil{
打印(“无法处理特殊字符”)
isSpecial=true
}否则{
isSpecial=假
}
返回值(strUpper.count>=1)&&smallresult&&numberresult&&isSpecial
}
Swift 5
func isValidPassword(_ password:String) -> Bool {
if(password.count > 7 && password.count < 17) {
} else {
return false
}
let nonUpperCase = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZ").inverted
let letters = password.components(separatedBy: nonUpperCase)
let strUpper: String = letters.joined()
let smallLetterRegEx = ".*[a-z]+.*"
let samlltest = NSPredicate(format:"SELF MATCHES %@", smallLetterRegEx)
let smallresult = samlltest.evaluate(with: password)
let numberRegEx = ".*[0-9]+.*"
let numbertest = NSPredicate(format:"SELF MATCHES %@", numberRegEx)
let numberresult = numbertest.evaluate(with: password)
let regex = try! NSRegularExpression(pattern: ".*[^A-Za-z0-9].*", options: NSRegularExpression.Options())
var isSpecial :Bool = false
if regex.firstMatch(in: password, options: NSRegularExpression.MatchingOptions(), range:NSMakeRange(0, password.count)) != nil {
print("could not handle special characters")
isSpecial = true
}else{
isSpecial = false
}
return (strUpper.count >= 1) && smallresult && numberresult && isSpecial
}
func isValidPassword(u密码:String)->Bool{
如果(password.count>7&&password.count<17){
}否则{
返回错误
}
让非大写=字符集(字符sin:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”)。反转
让字母=password.components(分隔符:非大写)
让strUpper:String=letters.joined()
设smalllettergex=“.[a-z]+.*”
让samlltest=NSPredicate(格式:“自匹配%@”,smalllettergex)
让smallresult=samlltest.evaluate(使用:密码)
让numberRegEx=“.[0-9]+.*”
让numbertest=NSPredicate(格式:“自匹配%@”,numberRegEx)
让numberresult=numbertest.evaluate(使用:密码)
让regex=try!NSRegularExpression(模式:“.[^A-Za-z0-9].*”,选项:NSRegularExpression.options())
var isSpecial:Bool=false
如果regex.firstMatch(in:password,options:NSRegularExpression.MatchingOptions(),range:NSMakeRange(0,password.count))!=nil{
打印(“无法处理特殊字符”)
isSpecial=true
}否则{
isSpecial=假
}
返回值(strUpper.count>=1)&&smallresult&&numberresult&&isSpecial
}
正则表达式/验证应该做什么?请遵守变量名以小写字母开头的命名约定。正则表达式/验证应该做什么?请遵守变量名以小写字母开头的命名约定。看起来它现在正在工作。但是,如果您查看我的最后几行代码。在if语句中,我确保所有内容都已填写且密码相同。我该怎么写才能确认呢?@JonasLarsen我已经更新了我的答案来更新注册方法,看起来它现在正在工作。但是,如果您查看我的最后几行代码。在if语句中,我确保所有内容都已填写且密码相同。我该怎么写才能确认呢?@JonasLarsen我已经更新了我的答案来更新注册方法哦,好吧,那么现在它至少有8个字符了?@JonasLarsen:是的。很好,现在我只需要在运行最后一个if语句之前澄清它是真的,有什么想法吗?哦,好吧,那么现在它至少有8个字符了?@JonasLarsen:是的。很好,现在我只需要在运行最后一个if语句之前澄清它是真的,有什么想法吗?