2013-11-07 5 views
13

Я хочу подтвердить номера телефонов, например (123) 456-7890 или 1234567890 Как должно быть условие «совпадений» должно быть записано в следующем коде?jquery для подтверждения номера телефона

form.validate({ 

    rules: { 

     phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10} 
+0

Что 'должен matches' быть? В этом плагине такого метода нет. – Sparky

+0

Код настроен – FlintOff

+0

Тогда вы должны были упомянуть об этом в OP. Почему бы не использовать один из нескольких [правил номера телефона, уже предоставленных этим плагином] (http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/additional-methods.js)? – Sparky

ответ

13

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

[0-9\-\(\)\s]+.

Он соответствует номерам, тире, круглым скобкам и пробелу.

Если вам нужно что-то более строгое, соответствующий только ваш пример, попробуйте следующее:

([0-9]{10})|(\([0-9]{3}\)\s+[0-9]{3}\-[0-9]{4})

+1

Вы уверены, что первое выражение верное? Я пробовал, но не работал для меня. – FlintOff

+1

@KarueBensonKarue 'var phone_pattern =/([0-9] {10}) | (\ ([0-9] {3} \) \ s + [0-9] {3} \ - [0-9] { 4}) /; phone_pattern.test (input_value); ' –

14
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/ 

Поддержка:

  • (123) 456 7899
  • (123) .456.7899
  • (123) -456-7899
  • 123-456-7899
+0

hmm ... как насчет этого:/^ \ (? (\ d {3}) \)? [-]? (\ d {3}) [-]? (\ d {4}) $/ –

13

Вашего код:

rules: { 
    phoneNumber: { 
     matches: "[0-9]+", // <-- no such method called "matches"! 
     minlength:10, 
     maxlength:10 
    } 
} 

Там нет такой функции обратного вызова, опции, метода или правила называется matches в любом месте в пределах the jQuery Validate plugin. (EDIT:. О.П. не упомянул, что matches его пользовательский метод)

Однако в the additional-methods.js file, существует несколько методов проверки номера телефона вы можете использовать. Тот, который называется phoneUS, должен удовлетворять вашему шаблону. Поскольку правило уже проверяет длину, minlength и maxlength излишне ненужны. Кроме того, гораздо более всеобъемлющим является то, что коды и префиксы не могут начинаться с 1.

rules: { 
    phoneNumber: { 
     phoneUS: true 
    } 
} 

DEMO: http://jsfiddle.net/eWhkv/


Если по какой-либо причине, вам просто необходимо регулярное выражение для использования в другом методе, вы можете взять его отсюда ...

jQuery.validator.addMethod("phoneUS", function(phone_number, element) { 
    phone_number = phone_number.replace(/\s+/g, ""); 
    return this.optional(element) || phone_number.length > 9 && 
    phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/); 
}, "Please specify a valid phone number"); 
+0

Спасибо. Но я должен указать стандарт кода. Они делают вещи так, как я писал. И я новичок в jquery: '( – FlintOff

+0

@ Mr.Flint, как я показал в последней части моего ответа, есть очень хорошее регулярное выражение для телефонного номера внутри этого метода, который вы можете взять и использовать вместо этого ... не что вы просили? На самом деле нет смысла писать код для чего-то, что уже существует ... особенно если вы новичок. – Sparky

+0

@ Mr.Flint, и если бы вы показали метод 'match' в вашем OP, мы могли бы создать рабочую демоверсию для вас. – Sparky

10
function validatePhone(txtPhone) { 
    var a = document.getElementById(txtPhone).value; 
    var filter = /^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/; 
    if (filter.test(a)) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

Демонстрацияhttp://jsfiddle.net/dishantd/JLJMW/496/

+0

000000 действительно? it dosn't work proply –

+0

не работает должным образом – ninjarails

3

Если вы сначала нормализуете свои данные, вы можете избежать всех очень сложных регулярных выражений, необходимых для проверки номеров телефонов. По моему опыту, сложные шаблоны регулярных выражений могут иметь два нежелательных побочных эффекта: (1) они могут иметь неожиданное поведение, которое было бы больно отлаживать позже, и (2) они могут быть медленнее, чем простые шаблоны регулярных выражений, что может стать заметным, когда вы выполняют регулярное выражение в цикле.

Сохраняя ваши регулярные выражения как можно более простыми, вы уменьшаете эти риски, и ваш код будет легче для других следовать, отчасти потому, что он будет более предсказуемым. Чтобы использовать пример номер телефона, первым мы можем нормализовать значение путем удаления всех не цифры, как это:

value = $.trim(value).replace(/\D/g, '');

Теперь ваш шаблон регулярного выражения для телефонного номера США (или любой другой местности) может быть много проще:

/^1?\d{10}$/

не только регулярное выражение гораздо проще, но и легче следовать тому, что происходит: значение необязательно ведущий с номером один (код США страны), а затем десять цифр. Если вы хотите отформатировать проверенное значение, чтобы сделать его выглядеть красиво, то вы можете использовать это чуть больше регулярные выражения шаблона:

/^1?(\d{3})(\d{3})(\d{4})$/

Это означает необязательный номер один, затем три цифры, еще три цифры, и заканчивающийся четырьмя цифрами. С каждой сохраненной группой чисел вы можете выводить ее так, как хотите. Вот codepen с помощью JQuery Validation, чтобы проиллюстрировать это для двух районов (Сингапур и США):

http://codepen.io/thdoan/pen/MaMqvZ

1

Я знаю, что это старый пост, но я думал, что я разделю мое решение, чтобы помочь другим.

Эта функция будет работать, если вы хотите актуальному 10 цифр телефонного номера «числа США»

function getValidNumber(value) 
{ 
    value = $.trim(value).replace(/\D/g, ''); 

    if (value.substring(0, 1) == '1') { 
     value = value.substring(1); 
    } 

    if (value.length == 10) { 

     return value; 
    } 

    return false; 
} 

Вот как использовать этот метод

var num = getValidNumber('(123) 456-7890'); 
if(num !== false){ 
    alert('The valid number is: ' + num); 
} else { 
    alert('The number you passed is not a valid US phone number'); 
} 
0

Это одна работа для меня: -

/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/ 
2
jQuery.validator.methods.matches = function(value, element, params) { 
    var re = new RegExp(params); 
    // window.console.log(re); 
    // window.console.log(value); 
    // window.console.log(re.test(value)); 
    return this.optional(element) || re.test(value); 
} 

rules: { 
     input_telf: { 
      required : true, 
      matches : "^(\\d|\\s)+$", 
      minlength : 10, 
      maxlength : 20 
     } 
    } 
Смежные вопросы