2009-04-24 3 views
8

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

Один, что позволяет любой длины Альфа-Числовое значение:

@"^\s*(?<ALPHA>[A-Z0-9]+)\s*" 

И только другая позволяет численные значения:

@"^\s*(?<NUM>[0-9]{10})" 

Как я могу получить численную строку длины 11 не для подхвата регулярным выражением NUM.

ответ

12

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

Пример: @"^\s*(?[0-9]{10})$"


Вот мой первоначальный ответ, но я думаю, что я читаю вас слишком точным.

string myRegexString = `@"(?!(^\d{11}$)` ... your regex here ...)"; 

что читает «а впереди нет, начать, 11 цифр, конец»

+0

Спасибо, что это то, что я искал ... – CheGueVerra

0

Сопоставьте что-то нечисловое после длины 10 строк. Мое regex-foo не так уж и хорошо, но я думаю, что у вас есть настройка там, чтобы поймать числовую строку ровно в длину 10, но поскольку после этого вы ничего не согласитесь, также будет соответствовать длина строки 11. Попытайтесь сопоставить результаты за пределами номера, и все будет хорошо.

0

Вы можете попробовать чередование?

^\s*(?\d{1,10}|\d{12,}) 
4

Если это одна строка, вы можете указать, что матч должен произойти в конце линии, как это. чистый ...

^\s*([0-9]{10})\z 

Это будет принимать 1234567890, но отвергают 12345678901.

0

Это должно соответствовать только 10 цифр и позволяют произвольные числа пробелов до и после цифр.

Non захвата версия: (только спички, совпавшие цифры не сохраняются)

^\s*(?:\d{10})\s*$ 

Захват версии: (совпавшие цифры доступны в подгруппе 1, как $ 1 или \ 1)

^\s*(\d{10})\s*$ 
0

Если вы пытаетесь соответствовать только цифры, которые длиной 10 цифр, просто добавьте косую якорь, используя $, например:

^\s*(?:[0-9]{10})\s*$ 

Это будет соответствовать любому числу, которое составляет ровно 10 цифр (с дополнительным пространством с обеих сторон).

2

Возможно, вы хотите соответствовать до 10 цифр?Попробуйте это:

@"^\s*[0-9]{1,10}\s*$" 
0

var pattern =/\b[0-9]{10}$\b/; 
 

 
// the b modifier is used for boundary and $ is used for exact length

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