2014-09-04 4 views
1

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

французские номера мобильных телефонов начинаются с 06 или 07 и следуют 8 цифр, как это: 0611223344 или 0744332211. Международная форма этих чисел начинается с +33, которая заменяет первые 0, например: +33611223344 или +33744332211.

Я использую этот RegEx: (\+\b33|\b0)[67][0-9]{8}\b, который проверяет, начинается ли вход с +336/7 или 06/7 и за ним следуют 8 цифр.

Я добавил Word Boundary (\b), поэтому числа, подобные 06112233440611223344 (две конкатенированные правильные формы), не совпадают.

Это RegEx работает отлично thoses случаях:

0611223344 // matches 
0744332211 // matches 
+33611223344 // matches 
+33744332211 // matches 
06112233440744332211 // doesn't match 

Но я до сих пор возникают проблемы с этими входами:

+33611223344+33611223344 
0611223344 0744332211 
0744332211+33611223344 
0744332211 +33611223344 

Они весь матч ...

Я пытался добавить ^ и $ всеми возможными способами для моего RegEx, но всякий раз, когда я добавляю один из этих символов, RegEx больше не работает.

ответ

0
^(\+\b33|\b0)[67][0-9]{8}$ 

Ваше регулярное выражение работает отлично. Просто добавьте анкеры.

См. Демонстрационную версию.

http://regex101.com/r/pP3pN1/35

+0

Спасибо за вашу демонстрацию. Оказалось, что сайт, на котором я тестировал свой RegEx (regexr.com), не рассматривает новые строки как разделенные входы ... – Seeven

+0

ERRATUM: regexr.com рассматривает новые строки до тех пор, пока вы устанавливаете теги '//gm' (а не только '//g', как и по умолчанию). (Я все еще думаю, что regex101 лучше). – Seeven

+0

@SeevenByakko/m us multiline.you нужно установить его даже на regex101.com, если вы хотите протестировать его по нескольким строкам. \ G ifs для глобального соответствия. Так что он возвращает все match.flags, должен быть установлен каждый раз. – vks

1

Вы можете использовать ниже регулярное выражение, чтобы соответствовать всем французским номерам телефонов,

^(?:(?:0|\+33)(?:6|7))\d{8}$ 

DEMO

Используйте ниже регулярное выражение, если вы хотите, чтобы соответствовать номерам, которые находятся в этом формате 06 21 05 65 48 и +33 6 21 05 65 48 также ,

^(?:(?:(?:0|\+33)(?:6|7))\d{8}|0[67](?: \d{2}){4}|\+33 [67](?: \d{2}){4})$ 

DEMO

+0

Должно быть большим, чтобы принять эти формы также: 06 21 05 65 48 и +33 6 21 05 65 48 – labilbe

+0

@labilbe почему? op не упоминал об этом. –

+0

Потому что французские пользователи склонны вводить числа, подобные этому. Таким образом, ваше регулярное выражение может служить для лучшей проверки ввода. – labilbe

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