Как определить точную длину в регулярном выражении - PullRequest
8 голосов
/ 25 апреля 2009

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

Тот, который допускает любую длину буквенно-цифрового значения:

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

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

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

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

Ответы [ 8 ]

15 голосов
/ 25 апреля 2009

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

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


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

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

Это означает "пока впереди нет, начало, 11 цифр, конец"

4 голосов
/ 25 апреля 2009

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

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

Это будет принимать 1234567890, но отклонять 12345678901.

2 голосов
/ 25 апреля 2009

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

@"^\s*[0-9]{1,10}\s*$"
0 голосов
/ 28 сентября 2017

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

// the b modifier is used for boundary and $ is used for exact length
0 голосов
/ 25 апреля 2009

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

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

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

0 голосов
/ 25 апреля 2009

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

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

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

Версия захвата: (соответствующие цифры доступны в подгруппе 1, как $ 1 или \ 1)

^\s*(\d{10})\s*$
0 голосов
/ 25 апреля 2009

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

^\s*(?\d{1,10}|\d{12,})
0 голосов
/ 25 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...