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

Validate Email và Phone Number trong Swift

Để validate email và số điện thoại trong Swift, thay vì dùng hàng chục câu điều kiện if, chúng ta sử dụng Regular Expression (Regex) kết hợp với NSPredicate – cách ngắn gọn, hiệu quả và chuẩn xác.

Triển khai dưới dạng Extension của String

Thêm code sau vào bất kỳ file Swift nào trong project (hoặc tạo file riêng String+Validation.swift):

extension String {
    var isValidEmail: Bool {
        let regex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
        let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
        return predicate.evaluate(with: self)
    }
    
    var isValidPhone: Bool {
        // Định dạng: 3 số - 3 số - 4 số (ví dụ: 998-877-2211)
        let regex = "^\\d{3}-\\d{3}-\\d{4}$"
        let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
        return predicate.evaluate(with: self)
    }
}

Cách sử dụng

override func viewDidLoad() {
    super.viewDidLoad()
    
    print("11f".isValidEmail)           // false
    print("abc@xyz.com".isValidEmail)   // true
    print("8892".isValidPhone)          // false
    print("998-877-2211".isValidPhone)  // true
}

Kết quả in ra console:

false
true
false
true

Validate Email và Phone Number trong Swift

Lưu ý về Regex số điện thoại

Regex ví dụ ^\\d{3}-\\d{3}-\\d{4}$ chỉ khớp định dạng XXX-XXX-XXXX (chuẩn US). Với Việt Nam, bạn nên điều chỉnh regex phù hợp:

// Ví dụ regex cho SĐT VN (di động 10 số, bắt đầu bằng 0)
var isValidPhoneVN: Bool {
    let regex = "^(0[3|5|7|8|9])+([0-9]{8})\\b"
    let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
    return predicate.evaluate(with: self)
}

Mẹo: Để validate email chuẩn xác hơn (theo RFC 5322), regex sẽ rất phức tạp. Trong thực tế, regex trên đủ dùng cho hầu hết ứng dụng. Có thể dùng thư viện Validator hoặc SwiftValidators cho phức tạp hơn.