2016-01-02 19 views
5

Im cố gắng hoàn thành xác thực biểu mẫu trong Swift và không thể tìm cách thử nghiệm chỉ cho các ký tự chữ và số trong một UITextField.text.Kiểm tra chuỗi văn bản UITextField để chỉ chứa các ký tự chữ và số

Ive thấy NSCharacterSet để giúp kiểm tra nếu ít nhất 1 chữ đã được nhập (cho đến nay):

@IBOutlet weak var username: UITextField! 
let letters = NSCharacterSet.letterCharacterSet() 

//Check username contains a letter 
    if (username.text!.rangeOfCharacterFromSet(letters) == nil) { 
     getAlert("Error", message: "Username must contain at least 1 letter") 
    } 

Bây giờ tôi chỉ cần một cách để xác nhận rằng chỉ số, chữ cái (thậm chí có dấu gạch dưới và dấu gạch ngang) được nhập vào. Tải công cụ cho Obj-C nhưng tôi cần một giải pháp SWIFT.

Cảm ơn bạn trước.

Trả lời

6

Kiểm tra nếu đảo ngược của bộ chấp nhận của bạn là hiện tại:

if username.text!.rangeOfCharacterFromSet(letters.invertedSet) != nil { 
    print("invalid") 
} 

letters có lẽ nên được alphanumericCharacterSet() nếu bạn muốn bao gồm số là tốt.

Nếu bạn muốn chấp nhận dấu gạch dưới hoặc nhiều ký tự hơn, có thể bạn sẽ phải tự tạo một ký tự. Nhưng logic nghịch đảo sẽ vẫn như cũ.

+0

Và bạn có thể xây dựng bộ ký tự là liên kết (kết hợp) các số, chữ thường và chữ thường. Hãy gọi nó là alphanumericSet. Sau đó sử dụng phương pháp này để nói "hiện trường văn bản có chứa bất kỳ ký tự nào không có trong bộ chữ số" –

+0

@ luk2302 không hoạt động này :(Tôi vẫn có thể đăng nhập bằng chuỗi "a_12 -() 11" – Chris

+0

@Chris thì bạn đã sử dụng mã sai hướng.Lưu ý rằng tôi đảo ngược logic của 'if' - bất cứ khi nào bạn hoàn thành điều kiện nếu bạn có tên người dùng hợp lệ trái ngược với mã của bạn, nơi hoàn thành điều kiện if có nghĩa là không hợp lệ. – luk2302

1

Mặc dù đã muộn để trả lời nhưng câu trả lời này có thể hữu ích đối với ai đó.

Điều này thật đơn giản và hoạt động như một sự quyến rũ đối với tôi.

Swift 3:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    /// 1. replacementString is NOT empty means we are entering text or pasting text: perform the logic 
    /// 2. replacementString is empty means we are deleting text: return true 
    if string.characters.count > 0 { 
     var allowedCharacters = CharacterSet.alphanumerics 

     /// add characters which we need to be allowed 
     allowedCharacters.insert(charactersIn: " -") // "white space & hyphen" 

     let unwantedStr = string.trimmingCharacters(in: allowedCharacters) 
     return unwantedStr.characters.count == 0 
    } 

    return true 
} 

Lưu ý: Điều này sẽ làm việc cho chuỗi dán vào trường văn bản là tốt. Chuỗi đã dán sẽ không được hiển thị trong trường văn bản nếu nó chứa bất kỳ ký tự không mong muốn nào.

Các vấn đề liên quan