Объединение двух валидаторов Regex - PullRequest
0 голосов
/ 23 февраля 2012

Я хочу проверить строку ввода электронной почты, поэтому это действительный адрес электронной почты. И я хочу проверить длину строки электронной почты, чтобы она не превышала 60 символов. Я использую RegularExpressionValidator .. У меня есть два из них, один для проверки шаблона электронной почты и один для проверки длины. Но это не похоже на работу. Я могу использовать по одному без проблем, но если я использую оба из них, они оба отображают ошибку там, где нет ошибки.

Можно ли их объединить? Или есть лучшее регулярное выражение, которое проверяет электронную почту и длину одновременно?

Контроль:

<%-- Validate EmailAddress --%>
<asp:RequiredFieldValidator ID="EmailAddressRequiredFieldValidator" runat="server" 
ErrorMessage="..." ControlToValidate="EmailAddressInsertTextBox" Display="None" ValidationGroup="InsertValidationGroup" />          

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="EmailAddressInsertTextBox" ErrorMessage="......" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" Display="None" ValidationGroup="InsertValidationGroup" />

<asp:RegularExpressionValidator ID="EmailAddressRegularExpressionValidator2" runat="server" ControlToValidate="EmailAddressInsertTextBox" ErrorMessage="..............." ValidationExpression="^[\w\s]{1,60}$" Display="None" ValidationGroup="InsertValidationGroup" />

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

Я не говорю, что это лучший подход, но если вы хотите объединить два регулярных выражения, вы обычно можете пойти на положительный взгляд позади .

Код ниже соответствуетзначением поля, состоящим из 1–60 символов от начала до конца.Заглядывание гарантирует, что значение соответствует вашему шаблону электронной почты, опционально предшествует и сменяется пробелом:

ValidationExpression="^.{1,60}$(?<=\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*)"
0 голосов
/ 23 февраля 2012

Я полагаю, что Regex Validator сработает, только если в поле есть текст, который нужно посмотреть. Вам нужен дополнительный валидатор, это asp: RequiredFieldValidator

<asp:RequiredFieldValidator runat="server" ControlToValidate="txtEmail" ErrorMessage="You must input an email address" />

Давайте сделаем это еще проще, создав функцию javascript и вызвав ее в нашем валидаторе

function validateEmail(email) {
    var regex = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
    // 60 char check
    return email.length <= 60 && regex.test(email);
}
0 голосов
/ 23 февраля 2012

Нет реальной причины, по которой это не должно работать.Рекомендуется применять их по отдельности, чтобы у вас могло быть два отдельных сообщения об ошибках для разных проблем.

Ниже приведен пример совместной работы двух над одним и тем же элементом управления: http://www.informit.com/articles/article.aspx?p=101137&seqNum=3 (см.«Листинг 3.6»)

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

Редактировать: Я попробовал код, который вы предоставили.Я изменил регулярное выражение валидатора длины на ^.{1,60}$, и оно работает для меня.Я также изменил отображение на динамическое, чтобы можно было его протестировать, но это не изменит результат Page.IsValid.

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