Biểu thức chính quy để khớp với số điện thoại 10 chữ số tiêu chuẩn


125

Tôi muốn viết biểu thức chính quy cho số điện thoại loại tiêu chuẩn của Hoa Kỳ hỗ trợ các định dạng sau:

###-###-####
(###) ###-####
### ### ####
###.###.####

Trong đó # có nghĩa là bất kỳ số nào. Cho đến nay tôi đã đưa ra các biểu thức sau đây

^[1-9]\d{2}-\d{3}-\d{4}
^\(\d{3}\)\s\d{3}-\d{4}
^[1-9]\d{2}\s\d{3}\s\d{4}
^[1-9]\d{2}\.\d{3}\.\d{4}

tương ứng. Tôi không chắc chắn nếu cuối cùng là chính xác cho kiểm tra chấm. Tôi cũng muốn biết liệu có cách nào tôi có thể viết một biểu thức duy nhất thay vì 4 biểu thức khác nhau phục vụ cho các định dạng khác nhau mà tôi đã đề cập. Nếu vậy, tôi không chắc làm thế nào để tôi làm điều đó. Và cũng làm thế nào để tôi sửa đổi biểu thức / biểu thức để tôi cũng có thể bao gồm một điều kiện để hỗ trợ mã vùng làm thành phần tùy chọn. Cái gì đó như

+1 ### ### ####

trong đó +1 là mã vùng và nó là tùy chọn.


5
có thể trùng lặp stackoverflow.com/questions/123559/ trên câu trả lời được đề xuất là loại bỏ mọi ký tự không có chữ số. Bằng cách này, bạn đơn giản hóa việc xác thực
Arnaud Denoyelle

1
Tôi biết điều này đã xảy ra một thời gian trước đây, nhưng tôi không nghĩ mã vùng của Hoa Kỳ có thể bắt đầu bằng 1. (123) 456-7890 sẽ không hợp lệ vì dẫn đầu 1.
bobanahalf

Để có câu trả lời chính xác hơn, xem: stackoverflow.com/a/18626090/561710
Joe Johnston

Phân tích số điện thoại là khó. Google đã phát hành một lib nguồn mở cho việc này. Hãy tự giúp mình, sử dụng libphonenumber (hoặc một ngã ba trong ngôn ngữ của bạn)
aloisdg chuyển đến codidact.com

Câu trả lời:


211
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

Phù hợp với những điều sau đây

123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890

Nếu bạn không muốn một trận đấu trên các số không phải của Hoa Kỳ, hãy sử dụng

^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

Cập nhật:
Như được chú ý bởi người dùng Simon Weaver bên dưới, nếu bạn cũng quan tâm đến việc khớp trên các số chưa được định dạng, chỉ cần làm cho lớp ký tự phân cách là tùy chọn như[\s.-]?

^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

1
Bạn có nghĩ rằng dấu chấm hỏi là không cần thiết trong phần (? \ D {3}) của dòng đầu tiên của bạn không? Tôi nghĩ rằng chúng ta cần một hoặc nhiều lần xuất hiện và không phải là 0 hoặc một lần xuất hiện của một chữ số trong '(' và ')'
noobcoder

2
?áp dụng trên dấu ngoặc đơn (), không phải trên các chữ số. Regex hoàn toàn liên quan là \(?\d{3}\)?. \d{3}xác định rằng phải có ba chữ số giữa các ()tùy chọn (được thực hiện) (bởi ?).
Ravi Thapliyal

6
lưu ý: điều này không phù hợp với 1234567890 có thể có hoặc không có vấn đề. đối với tôi nó là vậy - vì vậy tôi chỉ thêm vào ?sau mỗi cái [\s.-]để làm cho nó tùy chọn
Simon_Weaver

1
@Simon_Weaver Cảm ơn bạn đã đóng góp. Tôi đã thêm quan sát của bạn vào câu trả lời.
Ravi Thapliyal

3
Nếu bạn muốn một vấn đề tránh được vấn đề @BobRay đã đề cập, hãy sử dụng ^(\+\d{1,2}\s)?((\(\d{3}\))|(\d{3}))[\s.-]\d{3}[\s.-]\d{4}$. (Về cơ bản, tôi chỉ sao chép phân đoạn của RegEx bao gồm mã vùng và cho phép một biến thể có parens và một biến thể không có)
Shrey Gupta

128

Có nhiều biến thể có thể cho vấn đề này. Đây là một biểu thức chính quy tương tự như một câu trả lời tôi đã đặt trước đây trên SO.

^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$

Nó sẽ phù hợp với các ví dụ sau và nhiều hơn nữa:

18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
800 555 1234x5678
8005551234 x5678
1    800    555-1234
1----800----555-1234

Bất kể cách nhập số điện thoại, các nhóm chụp có thể được sử dụng để phân tích số điện thoại để bạn có thể xử lý số đó trong mã của mình.

  • Nhóm1: Mã quốc gia (ví dụ: 1 hoặc 86)
  • Nhóm2: Mã vùng (ví dụ: 800)
  • Nhóm 3: Trao đổi (ví dụ: 555)
  • Nhóm4: Số thuê bao (ví dụ: 1234)
  • Nhóm 5: Gia hạn (ví dụ: 5678)

Đây là bảng phân tích biểu thức nếu bạn quan tâm:

^\s*                #Line start, match any whitespaces at the beginning if any.
(?:\+?(\d{1,3}))?   #GROUP 1: The country code. Optional.
[-. (]*             #Allow certain non numeric characters that may appear between the Country Code and the Area Code.
(\d{3})             #GROUP 2: The Area Code. Required.
[-. )]*             #Allow certain non numeric characters that may appear between the Area Code and the Exchange number.
(\d{3})             #GROUP 3: The Exchange number. Required.
[-. ]*              #Allow certain non numeric characters that may appear between the Exchange number and the Subscriber number.
(\d{4})             #Group 4: The Subscriber Number. Required.
(?: *x(\d+))?       #Group 5: The Extension number. Optional.
\s*$                #Match any ending whitespaces if any and the end of string.

Để đặt Mã vùng tùy chọn, chỉ cần thêm dấu chấm hỏi sau (\ d {3}) cho mã vùng.


7
câu trả lời tốt nhất IMHO. Đối với mục đích của tôi, \skhông cần thiết ở đầu và cuối, vì tôi đang sử dụng để xác thực và trường đã được cắt bớt.
Daniel

1
Cho đến nay câu trả lời tốt nhất và đầy đủ nhất. Tôi cũng thực sự đánh giá cao sự cố regex.
Bryant Jackson

@Kondal Tôi tò mò về đầu vào bạn đang sử dụng để làm cho nó thất bại. Nó dường như hoạt động tốt với tôi với 0 cho mã quốc gia.
Francis Gagnon

<input type = "text" name = "phone_no" class = "form-control" ng-pattern = "^ \ s * (?: \ +? (\ d {1,3}))? [-. (] * (\ d {3}) [-.)] * (\ d {3}) [-.] * (\ d {4}) (?: * x (\ d +))? \ s * $ "chỉ -numbers ng-maxlength = "10" />
Kondal

@Kondal Xin lỗi. Tôi có nghĩa là văn bản bạn đang cố gắng để phù hợp với thất bại với regex này.
Francis Gagnon

8

^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

Khớp các số điện thoại này:

1-718-444-1122
718-444-1122
(718)-444-1122
17184441122
7184441122
718.444.1122
1718.444.1122
1-123-456-7890
1 123-456-7890
1 (123) 456-7890
1 123 456 7890
1.123.456.7890
+91 (123) 456-7890
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
+1 (800) 123-4567
18001234567
1 800 123 4567
+1 800 123-4567
+86 800 123 4567
1-800-123-4567
1 (800) 123-4567
(800)123-4567
(800) 123-4567
(800)1234567
800-123-4567
800.123.4567
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231
+99 1234567890
+991234567890
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
(003) 555-1212
(103) 555-1212
(911) 555-1212
18005551234
1 800 555 1234
+86 800-555-1234
1 (800) 555-1234

Xem regex101.com


7

Đây là một cái khá nhỏ gọn tôi tạo ra.

Search: \+?1?\s*\(?-*\.*(\d{3})\)?\.*-*\s*(\d{3})\.*-*\s*(\d{4})$

Replace: +1 \($1\) $2-$3

Đã thử nghiệm các trường hợp sử dụng sau đây.

18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
1--800--123--4567
+1 (800) 123-4567

Điều này phù hợp với những thứ như (800 444-4444
Jake

6

Thêm một ví dụ sử dụng các giải pháp được đề cập ở trên trên jsfiddle. Tôi đã sửa đổi mã một chút theo yêu cầu khách hàng của tôi. Hy vọng điều này cũng giúp được ai đó.

/^\s*(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$/

Xem ví dụ ở đây


4

Hãy thử điều này cho người dùng Pakistan. Đây là một cái khá nhỏ gọn mà tôi đã tạo.

((\+92)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]

Đã thử nghiệm các trường hợp sử dụng sau đây.

+92 -345 -123 -4567
+92 333 123 4567
+92 300 123 4567
+92 321 123 -4567
+92 345 - 540 - 5883

4

Regex số điện thoại mà tôi sử dụng: /^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/

Bao gồm:

  • 18001234567
  • 1 800 123 4567
  • +1 800 123-4567
  • +86 800 123 4567
  • 1-800-123-4567
  • 1 (800) 123-4567
  • (800)123-4567
  • (800) 123-4567
  • (800) 1234567
  • 800-123-4567
  • 800.123,4567

2

Các biểu thức cho 1, 3 và 4 khá giống nhau, vì vậy bạn có thể sử dụng:

^([1-9]\d{2})([- .])(\d{3})$2(\d{4})$

Lưu ý rằng, tùy thuộc vào ngôn ngữ và nhãn hiệu regexes được sử dụng, bạn có thể cần phải đặt \2thay vì $2hoặc kết hợp như vậy có thể không được hỗ trợ.

Tôi thấy không có cách nào tốt để kết hợp điều này với định dạng 2, ngoài việc rõ ràng ^(regex for 1,3,4|regex for 2)$là xấu xí, vụng về và làm cho nó khó để thoát ra khỏi các phần của các con số.

Đối với mã vùng, bạn có thể thêm (\+\d)?vào đầu để chụp mã vùng một chữ số (xin lỗi, tôi không biết định dạng mã vùng của bạn).


2

Còn cái này thì sao?

^(\+?[01])?[-.\s]?\(?[1-9]\d{2}\)?[-.\s]?\d{3}[-.\s]?\d{4}

EDIT: Tôi quên mất cái (). EDIT 2: Có phần 3 chữ số đầu tiên sai.


Không cần phải thoát dấu chấm .khi ở trong một lớp nhân vật, vì vậy [-\.\s]thực sự nên như vậy [-.\s], vì chúng ta không muốn khớp với dấu gạch chéo ngược.
Vedran Šego

Nó thực sự sẽ phù hợp với dấu gạch chéo ngược? Tôi nghĩ rằng nó có thể không cần thiết, nhưng tôi không chắc chắn 100%.
crimson_penguin

Bạn đúng rồi. Tôi vừa mới thử nó (tôi chưa bao giờ cần một dấu gạch chéo ngược trước đó) [\.][.]cả hai chỉ khớp với dấu chấm, trong khi [\\.]khớp cả dấu chấm và dấu gạch chéo ngược. Cảm ơn bạn đã nhận xét của bạn.
Vedran Šego

Ý kiến ​​của tôi về regexes là, nếu bạn đang đưa ra một regex cho ai đó, hãy luôn kèm theo nó với một lời giải thích, hoặc regex là vô giá trị. Chỉ là ý kiến ​​của tôi.
John Red

2

Bắt đầu với câu trả lời của @ Ravi, tôi cũng đã áp dụng một số quy tắc xác thực cho Mã NPA (Khu vực) .

Đặc biệt:

  • Nó nên bắt đầu bằng 2 (hoặc cao hơn)
  • Nó không thể có "11" là chữ số thứ hai và thứ ba (N11).

Có một số hạn chế khác, bao gồm các khối dành riêng (N9X, 37X, 96X) và 555, nhưng tôi đã loại bỏ chúng, đặc biệt vì các khối dành riêng có thể thấy việc sử dụng trong tương lai và 555 rất hữu ích để thử nghiệm.

Đây là những gì tôi nghĩ ra:

^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

Cách khác, nếu bạn cũng muốn khớp các giá trị trống (nếu trường không bắt buộc), bạn có thể sử dụng:

(^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$|^$)

Các trường hợp thử nghiệm của tôi cho các số hợp lệ (nhiều từ câu trả lời của @Francis) là:

18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234

Các trường hợp kiểm tra không hợp lệ của tôi bao gồm:

(003) 555-1212     // Area code starts with 0
(103) 555-1212     // Area code starts with 1
(911) 555-1212     // Area code ends with 11
180055512345       // Too many digits
1 800 5555 1234    // Prefix code too long
+1 800 555x1234    // Invalid delimiter
+867 800 555 1234  // Country code too long
1-800-555-1234p    // Invalid character
1 (800)  555-1234  // Too many spaces
800x555x1234       // Invalid delimiter
86 800 555 1212    // Non-NA country code doesn't have +

Biểu thức chính quy của tôi không bao gồm nhóm để trích xuất các nhóm chữ số, nhưng nó có thể được sửa đổi để bao gồm các nhóm.


2

Có lẽ dễ nhất so với một số người khác.

\(?\d+\)?[-.\s]?\d+[-.\s]?\d+

Nó phù hợp với những điều sau đây:

(555) 444-6789

555-444-6789

555.444.6789

555 444 6789


Một người hoàn hảo ... Cảm ơn (y)
Sushil Sharma

2

Mã này sẽ khớp với số điện thoại của Hoa Kỳ hoặc Canada và cũng sẽ đảm bảo rằng đó là mã vùng và trao đổi hợp lệ:

^((\+1)?[\s-]?)?\(?[2-9]\d\d\)?[\s-]?[2-9]\d\d[\s-]?\d\d\d\d

Kiểm tra trên Regex101.com


2

Regex patter để xác thực số điện thoại 10 chữ số thông thường cộng với mã quốc tế tùy chọn (1 đến 3 chữ số) và số mở rộng tùy chọn (bất kỳ số chữ số nào):

/(\+\d{1,3}\s?)?((\(\d{3}\)\s?)|(\d{3})(\s|-?))(\d{3}(\s|-?))(\d{4})(\s?(([E|e]xt[:|.|]?)|x|X)(\s?\d+))?/g

Bản trình diễn: https://www.regextester.com/103299

Các mục hợp lệ:

/* Full number */
+999 (999) 999-9999 Ext. 99999

/* Regular local phone number (XXX) XXX-XXXX */
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231

/* International codes +XXX (XXX) XXX-XXXX */
+99 1234567890
+991234567890

/* Extensions (XXX) XXX-XXXX Ext. XXX... */
1234567890 Ext 1123123
1234567890Ext 1123123
1234567890 Ext1123123
1234567890Ext1123123

1234567890 Ext: 1123123
1234567890Ext: 1123123
1234567890 Ext:1123123
1234567890Ext:1123123

1234567890 Ext. 1123123
1234567890Ext. 1123123
1234567890 Ext.1123123
1234567890Ext.1123123

1234567890 ext 1123123
1234567890ext 1123123
1234567890 ext1123123
1234567890ext1123123

1234567890 ext: 1123123
1234567890ext: 1123123
1234567890 ext:1123123
1234567890ext:1123123

1234567890 X 1123123
1234567890X1123123
1234567890X 1123123
1234567890 X1123123
1234567890 x 1123123
1234567890x1123123
1234567890 x1123123
1234567890x 1123123

1

Tôi thấy biểu thức chính quy này hữu ích nhất đối với tôi đối với số liên lạc 10 chữ số:

^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$

Tham khảo : https://regex101.com/r/QeQewP/1

Giải trình:

nhập mô tả hình ảnh ở đây


Bạn đã sử dụng một công cụ để tạo ra lời giải thích đó? Hãy chia sẻ! Cảm ơn
biết

@unn Unknown Trông giống như một ảnh chụp màn hình từ trình kiểm tra regex trực tuyến, chẳng hạn như regex101.com. Lưu ý rằng hướng dẫn SO nêu rõ rằng tất cả văn bản, mã, dữ liệu và thông báo lỗi phải được nhập ở dạng văn bản, không phải hình ảnh, vì văn bản trong hình ảnh có thể khó đọc, đặc biệt là trên thiết bị di động và phải chịu băng thông lớn hơn. Ngoài ra văn bản không thể được sao chép-dán. Trong trường hợp này, màu sắc có thể thêm một cái gì đó, không chắc chắn. Biết rằng nói chung, "Câu trả lời" nên bao gồm một lời giải thích bằng văn bản. Amitesh: sẽ rất hữu ích khi bao gồm một liên kết đến trang web này, với biểu thức chính quy của bạn đã được đưa ra để khách truy cập thử nghiệm.
SherylHohman

@unn Unknown ở đây là một liên kết tạo ra một hình ảnh tương tự như trong bài viết này. Chuỗi regex của Amitesh đã được dán. Bạn có thể nhập số điện thoại để kiểm tra kết quả của nó: regex101.com/r/QeQewP/1
SherylHohman


0

Đây là một phiên bản toàn diện hơn sẽ phù hợp với nhiều như tôi có thể nghĩ cũng như cung cấp cho bạn kết hợp nhóm cho quốc gia, khu vực, đầu tiên và cuối cùng.

(?<number>(\+?(?<country>(\d{1,3}))(\s|-|\.)?)?(\(?(?<region>(\d{3}))\)?(\s|-|\.)?)((?<first>(\d{3}))(\s|-|\.)?)((?<last>(\d{4}))))


0

Tôi đã kết thúc với

const regexBase = '(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})?[-. )]*(\\d{3})[-. ]*(\\d{4,5})(?: *x(\\d+))?'; const phoneRegex = new RegExp('\\s*' + regexBase + '\\s*', 'g');

điều này là để cho phép những thứ như số Hà Lan, ví dụ

+58 300 20200


0

Trên regex là một sửa đổi nhỏ của @Francis Gagnon.

Mục tiêu: Để phát hiện bất kỳ mẫu có thể nào, người dùng có thể chia sẻ số điện thoại ở Hoa Kỳ của họ


Phiên bản 1:

^\s*(?:\+?(\d{1,3}))?[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d[\W\D\s]*?\d)(?: *x(\d+))?\s*$

Kiểm tra nó ở đây Codepen: https://codepen.io/kiranbhattarai/pen/NWKMXQO

Giải thích về regex: https://regexr.com/4kt5j


Phiên bản 2:

\s*(?:\+?(\d{1,3}))?[\W\D\s]^|()*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d)[\W\D\s]*(\d[\W\D\s]*?\d[\D\W\s]*?\d[\W\D\s]*?\d)(?: *x(\d+))?\s*$

Những gì trong đó: Các trường hợp thử nghiệm có thể là một phần của chuỗi. Trong phiên bản một, các trường hợp thử nghiệm phải là một khởi đầu của một dòng để làm việc.

Codepen: https://codepen.io/kiranbhattarai/pen/GRKGNGG

Giải thích về regex: https://regexr.com/4kt9n


Nếu bạn có thể tìm thấy một mô hình có thể thất bại xin vui lòng bình luận tôi sẽ sửa nó.

Các trường hợp kiểm tra: Đạt

8 0   0  4  4  4  5   55 5
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
800 555 1234x5678
8005551234 x5678
1    800    555-1234
1----800----555-1234
800 (555) 1234
800(555)1234
8 0 0 5 5 5 1 2 3 4
8.0.0.5.5.5.1.2.3.4
8-0-0-5-5-5-1-2-3-4
(8)005551234
(80)05551234
8(00)5551234
8@0@0@5551234
8/0/0/5/5/5/1/2/3/4
8*0*0*5*5*5*1*2*3*4
8:0:0:5:5:5:1:2:3:4
8,0,0,5,5,5,1,2,3,4
800,555,1234
800:555:1234
1-718-444-1122
718-444-1122
(718)-444-1122
17184441122
7184441122
718.444.1122
1718.444.1122
1-123-456-7890
1 123-456-7890
1 (123) 456-7890
1 123 456 7890
1.123.456.7890
+91 (123) 456-7890
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
+1 (800) 123-4567
18001234567
1 800 123 4567
+1 800 123-4567
+86 800 123 4567
1-800-123-4567
1 (800) 123-4567
(800)123-4567
(800) 123-4567
(800)1234567
800-123-4567
800.123.4567
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123) 123-1231
(123) 123 1231
+99 1234567890
+991234567890
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
(003) 555-1212
(103) 555-1212
(911) 555-1212
18005551234
1 800 555 1234
+86 800-555-1234
1 (800) 555-1234

+86, +99 v.v ... chắc chắn không phải là số điện thoại của Mỹ. Một số trường hợp thử nghiệm khác của bạn trông đáng ngờ vì những lý do khác.
tripleee

@tripleee hãy để tôi sửa nó, tôi đã cập nhật nó cho bất kỳ nước nào tôi hy vọng nó hoạt động. Ngoài ra, tôi cũng loại bỏ các trường hợp kiểm tra trùng lặp
Kiran Bhattarai

0

Tôi chỉ đưa ra câu trả lời này vì nó giải quyết được vấn đề của tôi, nó dựa trên câu trả lời của @ Stormy, nhưng bao gồm mã quốc gia gồm 3 chữ số và quan trọng hơn là có thể được sử dụng ở bất cứ đâu trong chuỗi, nhưng sẽ không khớp. trước một khoảng trắng / bắt đầu của chuỗi và kết thúc bằng một ranh giới từ. Điều này hữu ích để nó không khớp với các số ngẫu nhiên ở giữa URL hoặc thứ gì đó

((?:\s|^)(?:\+\d{1,3}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4})(?:\b)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.