ASP.NET RegularExpressionValidator Ложный триггер - PullRequest
0 голосов
/ 02 мая 2018

Я проверяю пароль, который должен состоять из букв и цифр, по крайней мере, с одной цифрой и одной заглавной буквой. Для этого я использую следующее выражение RegEx:

(?=(^[a-zA-Z0-9]{6,16})$)(?=.*\d)(?=.*[A-Z])

При использовании этого шаблона пароль «Valid101» должен быть действительным, и он должен работать как ожидалось для A Better .NET Regular Expression Tester и REGEX TESTER . Но когда я использую его в RegularExpressionValidator моего пользовательского элемента управления ASP.NET, он ошибочно решает, что пароль "Valid101" недействителен.

Я надеюсь, что кто-то может подсказать, что может быть не так.

1 Ответ

0 голосов
/ 02 мая 2018

Шаблон, который у вас есть, состоит только из утверждений нулевой ширины, из заглядываний. Они не потребляют совпадающий текст, поэтому значение совпадения после совпадения с регулярным выражением является пустой строкой. RegularExpressionValidator требует полного совпадения строки (то есть совпадающая строка должна быть всей входной строкой).

Итак, вместо (?=(^[a-zA-Z0-9]{6,16})$)(?=.*\d)(?=.*[A-Z]) используйте

^(?=.*\d)(?=.*[A-Z])[a-zA-Z0-9]{6,16}$

Он обеспечит наличие в строке цифры и буквы ASCII в верхнем регистре, а затем будет соответствовать (потреблять) от 6 до 16 букв и цифр ASCII.

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