2016-07-20 3 views
4

Я пытаюсь реализовать регулярное выражение, которое позволяет мне проверить, является ли номер действительным французским телефонным номером.Regex для французских телефонных номеров

Должно быть так:

0X XX XX XX XX 

или:

+33 X XX XX XX XX 

Вот что я реализовал, но это не так ...

/^(\+33\s[1-9]{8})|(0[1-9]\s{8})$/ 
+0

насчет домашних телефонов и телефонов начиная с '07'? –

+0

'^ (((\ + 33 \ s) | 0) [1-9] \ s ([0-9] [0-9] \ s) {4}) $' может сделать трюк, но это довольно сложно и это просто и изменение от вас (обязательство поместить пробел между двумя цифрами), но '0033' не разрешено? – Larme

+0

@ Larme это, действительно –

ответ

7

Вы можете использовать:

^ 
    (?:(?:\+|00)33|0) #indicatif 
    \s*[1-9]    #first number (from 1 to 9) 
    (?:[\s.-]*\d{2}){4} #End of the phone number 
$ 

См demo


Это позволяет пробельные или . или - в качестве разделителя, или нет сепаратора на всех

1

Сплит регулярное выражение на две отдельные части:

  • префикс, который может быть либо +33 X или 0X

  • остальные числа (XX XX XX XX)

Regex будет:

^((?:\+33\s|0)[1-9](?:\s\d{2}){4})$ 
^non-capturing group for prefix 
        ^non-capturing group for number 
(        ) 
^ actual capture group from your original regex 

Это позволяет только пробельные в качестве разделителя; если вы хотите что-то более открытое, Thomas Ayoub's answer более подробно.

tested on Regex101

ПРИМЕЧАНИЕ: Согласно комментарий Томаса, так как регулярное выражение полное совпадение с использованием начальных и конечных маркеров (^$), группа захвата довольно ненужным. Затем вы можете вынести так:

^(?:\+33\s|0)[1-9](?:\s\d{2}){4}$ 

и он должен работать нормально.

+0

Спасибо за кредит. Поскольку строка является полным совпадением ('^ $'), я не уверен, что группа захвата необходима. Кроме того, '+33 0 12 34 56 78' не является допустимым номером ... –

+0

@ThomasAyoub Ах, моя нехватка знаний о том, как работают телефонные номера, виновата в этом. Будет редактировать. И очень верно в отношении группы захвата, я просто хотел отразить первоначальные намерения OP. Отметьте это. –

1

var phoneExp =/^ ((+) 33 | 0 | 0033) 1-9 {4} $/g;

принимает во внимание также 0033 сценария;)

1

Сложный пример (один я использую):

^(?:(?:\+|00)33[\s.-]{0,3}(?:\(0\)[\s.-]{0,3})?|0)[1-9](?:(?:[\s.-]?\d{2}){4}|\d{2}(?:[\s.-]?\d{3}){2})$ 

, например, она соответствует каждому из тезисов строк:


01 23 45 67 89 
01.23.45.67.89 
.67.89 
0033 123-456-789 
+33-1.23.45.67.89 
+33 - 123 456 789 
+33(0) 123 456 789 
+33 (0)123 45 67 89 
+33 (0)1 2345-6789 
+33(0) - 123456789 

Факс:

Смежные вопросы