2010-06-22 39 views
38

Cách xác thực số điện thoại bằng cách sử dụng phpLàm cách nào để xác thực số điện thoại bằng cách sử dụng PHP?

+1

Vui lòng xác định điều gì làm cho số điện thoại * hợp lệ *? – Gordon

+4

đây có phải là số điện thoại của Úc, số UK, số quốc tế, v.v. không? Việc xác thực số điện thoại từ khắp nơi trên thế giới có thể mở ra nhiều sâu hơn xác thực email - và tôi không nghĩ rằng tôi từng thấy việc đó hoàn thành 100% không thể sai được. – HorusKol

+0

Liên quan: http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation –

Trả lời

16

Vì số điện thoại phải phù hợp với mẫu, bạn có thể sử dụng cụm từ thông dụng để khớp với số điện thoại đã nhập dựa trên mẫu bạn xác định trong regexp.

php có cả hàm ereg và preg_match(). Tôi muốn đề nghị sử dụng preg_match() vì có nhiều tài liệu hơn cho phong cách regex này.

Một ví dụ

$phone = '000-0000-0000'; 

if(preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$/", $phone)) { 
    // $phone is valid 
} 
+14

và những người đặt dấu ngoặc quanh mã vùng của họ? (202) 555 1212 – Mawg

+11

Việc buộc một quy ước định dạng cụ thể là điên. Bạn cũng cần xử lý các tiền tố quay số quốc tế. – Quentin

+3

Đó phải là {3} ở giữa preg_match, phải không? Không phải là {4}. Ít nhất là cho số điện thoại ở Hoa Kỳ. –

13

tôi phụ thuộc rất nhiều vào các định dạng số bạn nhằm hỗ trợ và mức độ nghiêm ngặt bạn muốn thực thi nhóm số, sử dụng các khoảng trắng và dải phân cách khác vv ....

Hãy xem this similar question để nhận một số ý tưởng.

Tiếp theo là E.164 đó là một đề nghị tiêu chuẩn đánh số từ ITU-T

+2

cộng một cho e.164 – Mawg

25

Đây là cách tôi tìm thấy 10 chữ số số điện thoại Mỹ có hiệu lực. Tại thời điểm này, tôi giả sử người dùng muốn nội dung của tôi để các con số tự tin cậy. Tôi đang sử dụng trong một ứng dụng mà cuối cùng sẽ gửi một tin nhắn SMS vì vậy tôi chỉ muốn các số liệu thô không có vấn đề gì. Bạn luôn có thể thêm định dạng sau

//eliminate every char except 0-9 
$justNums = preg_replace("/[^0-9]/", '', $string); 

//eliminate leading 1 if its there 
if (strlen($justNums) == 11) $justNums = preg_replace("/^1/", '',$justNums); 

//if we have 10 digits left, it's probably valid. 
if (strlen($justNums) == 10) $isPhoneNum = true; 

Chỉnh sửa: Cuối cùng tôi phải chuyển sang Java, nếu có ai quan tâm. Nó chạy trên mọi phím tắt vì vậy tôi đã cố giữ nó khá nhẹ:

boolean isPhoneNum = false; 
if (str.length() >= 10 && str.length() <= 14) { 
    //14: (###) ###-#### 
    //eliminate every char except 0-9 
    str = str.replaceAll("[^0-9]", ""); 

    //remove leading 1 if it's there 
    if (str.length() == 11) str = str.replaceAll("^1", ""); 

    isPhoneNum = str.length() == 10; 
} 
Log.d("ISPHONENUM", String.valueOf(isPhoneNum)); 
+2

nếu số đã nhập là +1981878978 – Bugfixer

+0

@Bugfixer Chỉ loại bỏ hàng đầu 1 nếu chiều dài là 11. – Staysee

+0

Có thể sử dụng điều này với một số thay đổi. cảm ơn bạn đã trả lời trực tiếp. – Kray

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