2013-04-01 8 views
0

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

В принципе, у меня есть три отдельных набора правил для префикса:

  • Для 10 цифр номера мне нужно убедиться, что первые три являются числами, начиная с 2-9.
  • Для 11-значных чисел мне нужно убедиться, что первые 4 являются номерами, начинающимися с 1-9.
  • Для чего-либо большего, чем 12 цифр, мне нужно убедиться, что первые 7 являются числами от 0 до 9.

После того, что я могу позволить такие буквы, как 1888GOSUPER или что-то подобное (это подпадает под второе условие)

Это то, что я до сих пор, но я не уверен, если я покрыли все:

var reg10 = /^[2-9]{3}[a-z0-9]+$/i; 
var reg11 = /^[1-9]{4}[a-z0-9]+$/i; 
var reg12plus = /^[0-9]{7}[a-z0-9]+$/i; 
+0

Так '222aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' является допустимым числом? – zerkms

+0

Я управляю длиной с отдельной проверкой, если есть хороший способ включить ее здесь в регулярное выражение? – user710502

+0

любая причина не делать это прямо здесь? Как вы различаете, какое регулярное выражение соответствует, если каждый из них ожидает разную длину? – zerkms

ответ

3

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

^(?:[2-9]{3}[a-z0-9]{7})$|^(?:[1-9]{4}[a-z0-9]{7})$|^(?:[0-9]{7}[a-z0-9]{5,})$

В основном объединяет свои три отдельных случаев с помощью «чередования» |

Это может быть «нормализовано» немного, без «нарушения» четкости намерения, группируя все выражение, а затем окружая с помощью якорей начала/конца (вместо того, чтобы повторять их в каждой опции, как указано выше). Хотя это приводит к аналогичному правилу длины в целом, к тому времени мы добавим наш дополнительный нон-захвата группы:

^(?:(?:[2-9]{3}[a-z0-9]{7})|(?:[1-9]{4}[a-z0-9]{7})|(?:[0-9]{7}[a-z0-9]{5,}))$

+0

wow nice, большое вам спасибо – user710502

+0

@ user710502 Моя радость. Примечание ответ обновлен, первое правило теперь позволяет использовать 3 префикса и 7 суффикса для всего 10 цифр. – Sepster

+1

@zerkms Спасибо за исправление :-) Хотя это было _still_ wrong ;-) У меня было '{9}', вы изменили на '{8}', но это должно было быть '{7}' (для суффикса на десятизначном номере)! – Sepster

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