Để 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

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.