Wyrażenie regularne zgodne ze standardowym 10-cyfrowym numerem telefonu
Chcę napisać Wyrażenie regularne dla standardowego numeru telefonu typu US, które obsługuje następujące formaty:
###-###-####
(###) ###-####
### ### ####
###.###.####
Gdzie # oznacza dowolną liczbę. Do tej pory wymyśliłem następujące wyrażenia
^[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}
Odpowiednio. Nie jestem do końca pewien, czy ten ostatni jest poprawny do czeku z kropkami. Chcę też wiedzieć, czy jest jakiś sposób, w jaki mógłbym napisać jedno wyrażenie zamiast 4 różnych, które odpowiadają różnym formatom, o których wspomniałem. Jeśli tak, to nie jestem pewien, jak zrób to. A także Jak mogę zmodyfikować wyrażenie / wyrażenia tak, że mogę również dołączyć warunek obsługi kodu obszaru jako opcjonalny komponent. Coś jak
+1 ### ### ####
Gdzie +1 jest numerem kierunkowym i jest opcjonalny.
17 answers
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$
Pasuje do następujących
123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890
Jeśli nie chcesz dopasować liczb spoza USA użyj
^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$
Aktualizacja :
Jak zauważył użytkownik Simon Weaver poniżej, jeśli jesteś również zainteresowany dopasowaniem na nieformatowanych liczbach, po prostu ustaw klasę znaków separatora jako opcjonalną jako [\s.-]?
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-12 15:13:54
Istnieje wiele możliwych wariantów tego problemu. Oto Wyrażenie regularne podobne do odpowiedzi, którą wcześniej umieściłem na SO.
^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$
Pasuje do następujących przykładów i wiele więcej:
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
Niezależnie od sposobu wprowadzania numeru telefonu, grupy przechwytywania mogą być używane do podziału numeru telefonu, dzięki czemu można go przetworzyć w kodzie.
- Group1: kod kraju (ex: 1 lub 86)
- Group2: Numer Kierunkowy (ex: 800)
- Group3: Wymiana (ex: 555)
- Group4: Numer Abonenta (ex: 1234)
- Group5: Extension (ex: 5678)
Oto podział wyrażenia, jeśli jesteś zainteresowany:
^\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.
Aby Kod Kierunkowy był opcjonalny, po prostu dodaj znak zapytania po (\d{3}) dla Kodu Kierunkowego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 23:10:45
Dodanie przykładu wykorzystującego powyższe rozwiązania w jsfiddle. Zmodyfikowałem kod nieco zgodnie z wymaganiami moich klientów. Mam nadzieję, że to również komuś pomoże.
/^\s*(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-28 11:35:18
Oto dość kompaktowy, który stworzyłem.
Search: \+?1?\s*\(?-*\.*(\d{3})\)?\.*-*\s*(\d{3})\.*-*\s*(\d{4})$
Replace: +1 \($1\) $2-$3
Przetestowano pod kątem następujących przypadków użycia.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-25 16:26:51
Wyrażenia dla 1, 3 i 4 są dość podobne, więc możesz użyć:
^([1-9]\d{2})([- .])(\d{3})$2(\d{4})$
Zauważ, że w zależności od języka i marki używanych wyrażeń regularnych, może być konieczne umieszczenie \2
zamiast $2
lub takie dopasowanie może nie być w ogóle obsługiwane.
Nie widzę dobrego sposobu na połączenie tego z formatem 2, poza oczywistym ^(regex for 1,3,4|regex for 2)$
, który jest brzydki, niezdarny i sprawia, że trudno jest wydostać części liczb.
Jeśli chodzi o Kod Kierunkowy, możesz dodać (\+\d)?
do początku, aby uchwycić jednocyfrowy Numer Kierunkowy (przepraszam, nie znam formatu Twoich kodów kierunkowych).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 18:36:41
Co ty na to?
^(\+?[01])?[-.\s]?\(?[1-9]\d{2}\)?[-.\s]?\d{3}[-.\s]?\d{4}
EDIT: zapomniałem o (). EDIT 2: pomyliłem pierwszą 3-cyfrową część.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 18:45:48
Spróbuj tego dla pakistańskich użytkowników .Oto dość kompaktowy, który stworzyłem.
((\+92)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]
Przetestowano pod kątem następujących przypadków użycia.
+92 -345 -123 -4567
+92 333 123 4567
+92 300 123 4567
+92 321 123 -4567
+92 345 - 540 - 5883
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-14 19:06:46
Regex numeru telefonu, którego używam:
/^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/
Okładki:
- 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 20:00:38
Być może najłatwiejszy w porównaniu z kilkoma innymi.
\(?\d+\)?[-.\s]?\d+[-.\s]?\d+
Pasuje do:
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-19 12:50:31
Ten kod będzie pasował do amerykańskiego lub kanadyjskiego numeru telefonu, a także upewni się, że jest to prawidłowy numer kierunkowy i wymiana:
^((\+1)?[\s-]?)?\(?[2-9]\d\d\)?[\s-]?[2-9]\d\d[\s-]?\d\d\d\d
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 14:56:56
Regex patter do walidacji zwykły 10-cyfrowy numer telefonu plus opcjonalny kod Międzynarodowy (od 1 do 3 cyfr) i opcjonalny numer wewnętrzny (dowolna liczba cyfr):
/(\+\d{1,3}\s?)?((\(\d{3}\)\s?)|(\d{3})(\s|-?))(\d{3}(\s|-?))(\d{4})(\s?(([E|e]xt[:|.|]?)|x|X)(\s?\d+))?/g
Demo: https://www.regextester.com/103299
Ważne wpisy:
/* 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 19:49:33
^(\+1)?\s?(\([1-9]\d{2}\)|[1-9]\d{2})(-|\s|.)\d{3}(-|\s|.)\d{4}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 18:44:25
Zaczynając od odpowiedzi @ Ravi, zastosowałem również kilka zasad walidacji dla kodu NPA (Area) .
W szczególności:
- powinno zaczynać się od 2 (lub wyższej)
- nie może mieć "11" jako drugiej i trzeciej cyfry (N11).
Istnieje kilka innych ograniczeń, w tym zarezerwowane bloki (N9X, 37X, 96X) i 555, ale pominąłem je, szczególnie dlatego, że zarezerwowane bloki mogą być używane w przyszłości, a 555 jest przydatny do testowania.
To jest to co wymyśliłem:
^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Alternatywnie, jeśli chcesz dopasować puste wartości( jeśli pole nie jest wymagane), możesz użyć:
(^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$|^$)
Moje przypadki testowe dla poprawnych liczb (wiele z odpowiedzi @Francis) to:
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
Moje nieprawidłowe przypadki testowe obejmują:
(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 +
Moje Wyrażenie regularne nie zawiera grupowania w celu wyodrębnienia grup cyfr, ale można je zmodyfikować tak, aby je obejmowały.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-28 22:24:02
Jest to bardziej kompleksowa wersja, która będzie pasować tak dużo, jak mogę myśleć, a także daje dopasowanie grupy dla kraju, regionu, pierwszy i ostatni.
(?<number>(\+?(?<country>(\d{1,3}))(\s|-|\.)?)?(\(?(?<region>(\d{3}))\)?(\s|-|\.)?)((?<first>(\d{3}))(\s|-|\.)?)((?<last>(\d{4}))))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-16 21:57:57
A co z wieloma liczbami z " + "i rozdzieleniem ich znakami";"", "" - "lub""?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-06 07:16:37
Skończyłem z
const regexBase = '(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})?[-. )]*(\\d{3})[-. ]*(\\d{4,5})(?: *x(\\d+))?';
const phoneRegex = new RegExp('\\s*' + regexBase + '\\s*', 'g');
Miało to pozwolić na takie rzeczy jak liczby Holenderskie, na przykład
+358 300 20200
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-21 14:01:53
Uważam to wyrażenie regularne za najbardziej przydatne dla mnie dla 10-cyfrowego numeru kontaktowego:
^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$
Explanation:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-05 13:06:23