Если вы сначала нормализуете свои данные, вы можете избежать всех очень сложных регулярных выражений, необходимых для проверки номеров телефонов. По моему опыту, сложные шаблоны регулярных выражений могут иметь два нежелательных побочных эффекта: (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
Что 'должен matches' быть? В этом плагине такого метода нет. – Sparky
Код настроен – FlintOff
Тогда вы должны были упомянуть об этом в OP. Почему бы не использовать один из нескольких [правил номера телефона, уже предоставленных этим плагином] (http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/additional-methods.js)? – Sparky