2017-09-28 16 views
0

この正規表現について聞いたことがあり、動作させようとしています。正規表現によるXcode/swiftパスワードの検証

マイコード:

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) 
     } 
    } 

} 

私はそれを実行したときに、それが復帰状態にブレークポイントを作ります。私は何かを必要としていると思いますか? 誰も助けることができますか?

+0

は何ですか正規表現/検証する必要がありますか?変数名が小文字で始まる命名規則に従ってください。 – vadian

答えて

1
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) 
    } 
} 
+0

それは今働いているように見えます。しかし、あなたが私の最後のコード行を見るならば。 if文では、すべてが満たされ、パスワードが同じであることを確認します。それを確認するにはどうすればいいですか? –

+0

@JonasLarsen登録方法を更新するために私の回答を更新しました – Callam

1

.{>8}代わりに使用し、正規表現では有効ではありません。

let Password = NSPredicate(format: "SELF MATCHES %@", "^(?=.*[A-Z])(?=.*[0-9]).{8,}$") 
#            close lookahead __^  __^ ^^^^^ 
+0

ああ、今は少なくとも8文字ですか? –

+0

@JonasLarsen:そうです。 – Toto

+0

完璧な、今私はちょうど最後のifステートメント、任意のアイデアを実行する前にそれが真であることを明確にする必要がありますか? –