Регулярное выражение ASP.NET для ограничения последовательных символов - PullRequest
0 голосов
/ 19 октября 2010

Используя синтаксис ASP.NET для элемента управления RegularExpressionValidator, как указать ограничение двух последовательных символов, скажем символа «x»?

Ответы [ 4 ]

0 голосов
/ 10 декабря 2010

Вы можете использовать регулярные выражения для проверки того, что не так, а также, что правильно, конечно. Регулярное выражение (.)\1 будет соответствовать любым двум последовательным символам, так что вы можете просто отклонить любой ввод, который дает результат IsValid. Если это единственная валидация, которая вам нужна, я думаю, что этот способ гораздо проще, чем пытаться придумать регулярное выражение для проверки правильности ввода.

0 голосов
/ 20 октября 2010

Алекс прав, это способ сопоставления последовательных символов с регулярным выражением, то есть (a)\1 соответствует aa.

Тем не менее, я думаю, что это тот случай, когда вы держите молоток, как гвоздь.Я бы не использовал регулярные выражения для проверки этого ввода.Скорее, я предлагаю проверить это в коде (просто просматривая строку, сравнивая str[i] и str[i-1], проверяя это условие).

0 голосов
/ 10 декабря 2010

Это должно работать:

^((?<char>\w)(?!\k<char>))*$

Это соответствует abc, но не abbc.

Ключ должен использовать так называемое «отрицательное прогнозное утверждение нулевой ширины» (синтаксис: (?! Подвыражение)).

Здесь мы удостоверяемся, что за группой, совпадающей с (?<char>\w), не следует сама по себе (выражается (?!\k<char>)).

Обратите внимание, что \w можно заменить любым допустимым набором символов (\w не соответствует символам пробелов).

Вы также можете сделать это без именованной группы (обратите внимание, что указанная группа имеет номер 2):

^((\w)(?!\2))*$

И важно начинать с ^ и заканчивать $, чтобы соответствовать всему тексту.

Если вы хотите исключить только текст с последовательными x символами, вы можете использовать это

^((?<char>x)(?!\k<char>)|[^x\W])*$

или без обратных ссылок

^(x(?!x)|[^x\W])*$

Все синтаксические элементы для .NET Framework Регулярные выражения объяснены здесь .

0 голосов
/ 19 октября 2010

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

(\\w)\\1+

(\\w) будет соответствовать любому символу слова, а \\1+ будет соответствовать любому символу, которому соответствует (\\w).

В данный момент у меня нет доступа к asp.net, но в качестве примера рассмотрим это консольное приложение:

Console.WriteLine(regex.IsMatch("hello") ? "Not valid" : "Valid"); // Hello contains to consecutive l:s, hence not valid

Console.WriteLine(regex.IsMatch("Bar") ? "Not valid" : "Valid"); // Bar does not contain any consecutive characters, so it's valid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...