2013-07-03 2 views
0

У меня есть приложение для отправки TAN пользователям через SMS. У нас уже есть API для отправки SMS на номер мобильного телефона. Поэтому я должен убедиться, что это правильный номер мобильного телефона. Под моим регулярным выражением:ASP.NET Regex для проверки номера мобильного телефона

function validateMobile(str) { 

     var filter = /^\+?(\d[\d-. ]+)?(\([\d-. ]+\))?[\d-. ]+\d$/; 

     if (!filter.test(str)) { 
      alert('Please provide a valid mobile phone number'); 
      return false; 
     } 
     return true; 
    } 

Он не принимает символы, только число и '+' разрешены. Пользователи могут вводить, например, + 49176xxxxxxxx или 0176xxxxxxxx (без кода страны)

Но это регулярное выражение серьезно испорчено. Пользователи могут вводить любые цифры, например. 1324567982548, это регулярное выражение также возвращает true. Я думал о том, чтобы проверить длину текстового поля, он будет работать, но пока это не подходящее решение.

Есть ли другое лучшее регулярное выражение или способ проверить более конкретный номер мобильного телефона?

Заранее спасибо.

решаемые

Я решил это с новым регулярным выражением:

var filter = /^(\+49\d{8,18}|0\d{9,18})((,\+49\d{8,18})|(,0\d{9,18}))*$/; 

или как mzmm56 предлагается ниже:

var filter = /^(?:(\+|00)(49)?)?0?1\d{2,3}\d{8}$/; 

Оба одинаково хорошо.

ответ

0

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

во всяком случае, в Германии, я считаю, что следующее регулярное выражение будет работать, только позволяя один + в самом начале, а потом ничего, кроме цифр:

^(?:(\+|00)(49)?)?0?1\d{2,3}\d{8}$ 

с 0?1\d{2,3} он принимает во внимание, что немецкие мобильные номера могут или может не начинаться с 0, начинаются с 1, а за ними следуют еще 2 номера (в вашем случае 76) или 3 номера (176), если не было ведущего 0.

+0

Эй, спасибо. оно работает. Кроме того, я пришел с другим регулярным выражением, и он работал как ваш var filter =/^ (\ + 49 \ d {8,18} | 0 \ d {9,18}) ((, \ + 49 \ d {8,18}) | (, 0 \ d {9,18})) * $ /; – Ragnarsson

+0

отлично-рад, что это сработало – mzmm56

0

Возможно, было бы проще удалить все нечисловые символы (кроме + возможно), а затем повторно выставить его, а затем, если вам нужно его вывести, просто переформатируйте его.

Вот регулярное выражение для номера телефона после нечисловых символов были лишены:

^\+[1-9]{1}[0-9]{10}$ 

Для получения более подробной информации о кодах стран см this post.

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