Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> iOS

Kiểm tra chuỗi có chứa ký tự đặc biệt trong Swift

Để kiểm tra xem một chuỗi có chứa ký tự đặc biệt trong Swift, chúng ta có thể dùng câu điều kiện if-else hoặc switch, nhưng sẽ cần rất nhiều điều kiện, làm cho code dài và chậm. Trong bài này, chúng ta sẽ xem 2 phương pháp hiệu quả: Regular Expression (Regex) và CharacterSet.

Phương pháp 1: Sử dụng Regular Expression

Tạo extension cho String:

extension String {
    var containsSpecialCharacter: Bool {
        let regex = ".*[^A-Za-z0-9].*"
        let testString = NSPredicate(format: "SELF MATCHES %@", regex)
        return testString.evaluate(with: self)
    }
}

Test:

override func viewDidLoad() {
    super.viewDidLoad()
    print("3r42323".containsSpecialCharacter)  // false
    print("!--%332".containsSpecialCharacter)  // true
}

Kết quả:

Kiểm tra chuỗi có chứa ký tự đặc biệt trong Swift

Phương pháp 2: Sử dụng CharacterSet

Kiểm tra xem chuỗi có ký tự nào nằm ngoài tập cho phép (chữ cái, số) không:

let characterSet = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")

if "3r42323".rangeOfCharacter(from: characterSet.inverted) != nil {
    print("true")  // Có ký tự đặc biệt
} else {
    print("false") // Chỉ có chữ/số
}

if "!--%332".rangeOfCharacter(from: characterSet.inverted) != nil {
    print("true")
} else {
    print("false")
}

Kết quả:

Kiểm tra chuỗi có chứa ký tự đặc biệt trong Swift

So sánh

Tiêu chíRegexCharacterSet
Độ phức tạpCần hiểu regexĐơn giản, dễ hiểu
Hiệu năngChậm hơn một chútNhanh hơn
Linh hoạtRất cao (pattern phức tạp)Giới hạn ở tập ký tự

Khuyến nghị: Dùng CharacterSet cho trường hợp đơn giản (chỉ cho phép chữ/số). Dùng Regex khi cần quy tắc phức tạp (ví dụ: mật khẩu phải có chữ hoa, chữ thường, số, ký tự đặc biệt).