2014-10-22 2 views
0

Я ищу построить регулярное выражение, которое соответствует следующей группе цифр:Regex точной длины, которая соответствует определенной группе чисел

10xxxxxxx 
1116xxxxx 
143xxxxxx 
146xxxxxx 
149xxxxxx 
159xxxxxx 
16xxxxxxx 

(обратите внимание на длину всегда 9)

где х любая цифра. Моя лучшая попытка дала следующее:

/^1[01456][1369]*[6]*[0-9]$/ 

Однако, я не могу получить длину строки, которая всегда будет 9. Любые идеи?

Редактировать: Возможно, я был недостаточно ясен, он должен соответствовать этим 7 случаям, и ТОЛЬКО этим, включительно и исключительно.

+1

Грубый, но рабочий способ заключается в замене каждого 'x' на' \ d', объединении '' 'и завершении в'^(...) $ '. – georg

ответ

3

Как насчет:

^1(?:[06]\d{2}|116|4[369]\d|59\d)\d{5}$ 
+0

Скорее всего, более эффективен, чем мой (+1), но, похоже, сложно подумать (т. е. если другой программист взял на себя и должен был изменить действительные числа). – Sam

+0

Я буду проклят, он работает. Благодаря! – GAntoine

+0

@ArcaneCraeda: Добро пожаловать. – Toto

0

Вы можете использовать это регулярное выражение:

/^1[01456][1369][0-9]{6}$/ 

С 3 цифры уже согласованы на первых 3-х моделей 1, [01456] и [1369] так последний должен соответствовать точно 6 символов, чтобы обеспечить его ввод в 9 цифр.

+1

Этого не будет, поскольку он не будет соответствовать 162000000. 2 в этой строке проблема. – GAntoine

+1

Это соответствует другим шаблонам, хотя, например. '112xxxxxx' ... – Cameron

+1

@ArcaneCraeda: Не знаю, как'^1 [1369] [0-9] {6} $ 'может соответствовать' 162000000', поскольку 2 не разрешен как 3-й символ. – anubhava

1

использовать этот шаблон

^1[01456](16|3\d|6\d|9\d|\d\d)\d{5}$ 
1

Является ли это то, что вы хотите?

^(?=[0-9]{9}$)(?:10|1116|143|146|149|159|16) 

Demo


Это начинается, глядя на начало строки для ровно 9 цифр, используя положительный предпросмотр прикрепленный к концу строки. Затем мы ищем любую из ваших 7 конкретных групп чисел, с которой может начинаться строка.

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