2015-09-22 26 views
5

Próbuję utworzyć regex że sprawdza 2 pierwsze znaki międzynarodowego numeru telefonu jako użytkownik wpisze go w:Regex do sprawdzenia początek międzynarodowego numeru telefonu

jest ważny: +, 0, + followed by a number, 00 , 0032476382763, +324763

nie jest poprawny: 0 followed by a number different than 0, ++, everything that is not in the valid list

do tej pory wymyślić:

/[0]|[00]|[+]|[+\d]]/g 

Ale to potwierdza ++, ale nie +2. Problem polega na tym, że nie mogę wymyślić sposobu sprawdzania poprawności w zależności od liczby znaków (1 lub 2).

Używam tego wyrażenia w javascript. Oto wyliczenie, nad którym pracowałem: http://regexr.com/3br5v

Mój poziom w wyrażeniu regularnym nie jest zbyt dobry, więc każda pomoc byłaby bardzo cenna.

+0

W jakim języku to jest? Perl/C#/...? – rbm

+0

@rbm Edytowałem mój post – skirato

+0

Zwróć uwagę, że w Twoich przykładach używasz '[]' niepoprawnie. '[]' oznacza * klasę znaków *, więc '[0]' będzie pasować tylko zerom, a '[00]' jest dokładnie takie samo jak '[0]'. To nie jest konstrukcja grupująca. –

Odpowiedz

2

Wydaje się to zrobić trick (naprawiono błąd z fałszywym 01):

/^([+]|00|0$)(\d*)$/ 

https://regex101.com/r/qT0dB7/2

+0

Ups, wygląda na to, że '01' jest fałszywie dodatnim, próbując naprawić. –

+0

Zaktualizowano wyrażenie regularne w poście –

0

To jest praca ld:

^[1-9]\d|\+[1-9]|00 
0

\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d| 
 
2[98654321]\d|9[]|8[6421]|6[]|5[87654321]| 
 
4[987654310]|3[]|2[70]|7|1)\d{1,14}$

można użyć, jeśli chcesz, aby potwierdzić pełny numer międzynarodowy.