2016-10-01 6 views
0

私はFirst_Nameユーザーを文字のみを許可するように制限しています。そのため、send_buttonをクリックした後に数字や特殊文字のエラーが返される必要があります。私はここでいくつかの例を見つけましたが、古いバージョンの上にビルドされているため、問題を起こしています。今まで私はこのテキストフィールドの最初の要素が文字ではなく、コードがこのようなものを許可する(First name = "J123g")か( "Mark @#$")、First Nameを読み込み、私はこれが事実であるとは思わない。両方の不要な例と一致する1つの英数字ためは、ユーザー名の文字のみを許可します。

func isOneLetter(in text: String) -> Bool { 
    do { 
     let regex = try NSRegularExpression(pattern: "[a-zA-Z]") 
     let nsString = text as NSString 
     let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length)) 
     let temp = results.map { nsString.substring(with: $0.range)} 
     return temp.isEmpty 
    } catch let error { 
     print("invalid regex: \(error.localizedDescription)") 
     return false 
    } 
} 

@IBAction func Send_Button(_ sender: AnyObject) { 
    let UserName = First_Name.text 
    if (isOneLetter(in: UserName!)) 
    { 
     DisplayMyAlertMessage(userMessage: "First Name must contain only letter and spaces") 
    } 
} 

答えて

2

あなたの正規表現パターンをチェックします。

^を始めてからため、この正規表現をチェックし、文字列の末尾$への1つ以上の+英数字[a-zA-Z])がなければなりません。利点は、空の文字列も悪いものとして扱うことです。

^[a-zA-Z]+$ 
+0

おかげで、あなたの安全私のコード!今それは完璧に動作します! –

1

もう一つの方法は次のようになります。

let userInput = "" 
let set = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ") 
if userInput.rangeOfCharacter(from: set.inverted) != nil { 
    print("ERROR: There are numbers included!") 
} 
0

が迅速3用の更新:

あなたは名前を検証して、シンプルなラインの下に使用されるユーザ名の文字だけを許可する場合コードの:

//関数定義:

func isValidName(_ nameString: String) -> Bool { 

    var returnValue = true 
    let mobileRegEx = "[A-Za-z]{3}" // {3} -> at least 3 alphabet are compulsory. 

    do { 
     let regex = try NSRegularExpression(pattern: mobileRegEx) 
     let nsString = nameString as NSString 
     let results = regex.matches(in: nameString, range: NSRange(location: 0, length: nsString.length)) 

     if results.count == 0 
     { 
      returnValue = false 
     } 

    } catch let error as NSError { 
     print("invalid regex: \(error.localizedDescription)") 
     returnValue = false 
    } 

    return returnValue 
} 

//関数呼び出し:

 var firstName = mEnterFirstNameTextField.text! 

    let isFirstNameValid = isValidName(firstName) 

    if isFirstNameValid{ 
     // do user logic 
    }else{ 
     // show error msg: -> "Enter name is not valid, please enter again..." 
    } 
関連する問題