2016-06-15 11 views
-1

Ich arbeite an einem Benutzernamen Regex, wo die einzigen Zeichen, die akzeptiert werden, sind a-z, A-Z, 0-9 und _. Die aktuelle maximale Länge des Benutzernamens beträgt 18 Zeichen mit mindestens einem Zeichen. Mein aktueller Regex ist unten.Regex Problem in Swift

lassen regexCorrectPattern = "[a-zA-Z0-9 _] {1,18} $"

ich folgendes Problem habe. Sonderzeichen, die an einer anderen Stelle als am Ende der Zeichenfolge hinzugefügt wurden, ermöglichen das Bestehen der Regex. Zum Beispiel

jon! FAIL

! Jon PASS

j! Auf PASS

Die Methode, die ich die Regex zusammen mit der anrufenden Methode ist unten zu testen verwenden. Jede Eingabe würde sehr geschätzt werden.

Regex Testmethode

func regexTestString(string: String, withPattern regexPattern: String) -> Bool 
{ 
     // This method is used for all of the methods below. 
     do 
     { 
      // Create regex and regex range. 
      let regex = try NSRegularExpression(pattern: regexPattern, options: .CaseInsensitive) 
      let range = NSMakeRange(0, string.characters.count) 

      // Test for the number of regex matches. 
      let numberOfMatches = regex.numberOfMatchesInString(string, options: [], range: range) 

      // Testing Code. 
      print(numberOfMatches) 

      // Return true if the number of matches is greater than 1 and return false if the number of mathces is 0. 
      return (numberOfMatches == 0) ? false : true 
     } 
     catch 
     { 
      // Testing Code 
      print("There is an error in the SignUpViewController regexTestString() method \(error)") 

      // If there is an error return false. 
      return false 
     } 
    } 

Methode aufrufen

func usernameTextFieldDidEndEditing(sender: AnyObject) 
    { 
     let usernameText = self.usernameField.text!.lowercaseString 

     let regexCorrectPattern = "[a-zA-Z0-9_]{1,18}$" 
     let regexWhitespacePattern = "\\s" 
     let regexSpecialCharacterPattern = ".*[^A-Za-z0-9].*" 

     if regexTestString(usernameText, withPattern: regexCorrectPattern) 
     { 
      // The regex has passed hide the regexNotificationView 

     } 
     else if regexTestString(usernameText, withPattern: regexWhitespacePattern) 
     { 
      // The username contains whitespace characters. Alert the user. 
     } 
     else if regexTestString(usernameText, withPattern: regexSpecialCharacterPattern) 
     { 
      // The username contains special characters. Alert the user. 
     } 
     else if usernameText == "" 
     { 
      // The usernameField is empty. Make sure the sign up button is disabled. 
     } 
     else 
     { 
      // For some reason the Regex is false. Disable the sign up button. 
     } 
    } 
+0

'az, A -Z, 0-9 und _ 'wie soll'! Jon' gehen? –

Antwort

1

Sie die gesamte Zeichenfolge wollen nur die Zeichen enthalten, die Sie angegeben, so alles, was Sie brauchen, ist ^ am Anfang des Musters hinzufügen :

^[a-zA-Z0-9_]{1,18}$

+0

Super! Das hat perfekt funktioniert. Danke für die Hilfe. – jonthornham