Валидаторы полей регулярных выражений ASP.NET с накоплением

У меня есть 2 валидатора регулярных выражений ASP.NET:

  1. ^\s*[-+.'\w]+@\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$ проверьте, действителен ли адрес электронной почты
  2. @(adres.pl|vp.pl) проверьте, содержит ли значение какую-либо из этих строк

Проблема сейчас в следующем: Строки в пункте 2 выше НЕ ДОЛЖНЫ быть разрешены, поэтому адрес электронной почты «john@adres.pl» не должен быть разрешен.

Однако валидаторы являются только положительными, что означает, что они проверяют, содержат ли они структуру. Поэтому, когда кто-то в настоящее время вводит «test@test.com», я получаю «недопустимое значение»

Мой код ниже:

<asp:TextBox ID="tbEmail" runat="server" />
<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="emailinvalid" ValidationExpression="^\s*[-+.'\w]+@\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$" ID="rev1" runat="server"/>
<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="not allowed" ValidationExpression="@(adres.pl|vp.pl)" ID="rev2" runat="server"/>

Сначала я думал объединить выражения 1 и 2, но тогда я не знал, какое из них не работает, и не знал, какую ошибку отображать.

Чего я ожидаю, так это:

  • "35435gd" -> emailinvalid
  • "john@adres.pl" -> не разрешено
  • "john@gmail.com" -> все валидаторы в порядке

Или, возможно, валидатор rev2 должен выполняться только в том случае, если rev1 не выдает ошибку, поэтому «складывается» из-за отсутствия лучшего термина, что a: кажется громоздким, а b: я не знаю, как это сделать.

Как я могу решить эту проблему?

ОБНОВЛЕНИЕ 1

<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="invalid" ValidationExpression="^\s*[-+.'\w]+@(?!(?:adres|vp)\.pl\b)\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$" ID="RegularExpressionValidator5" runat="server"/>
<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="not allowed" ValidationExpression="@(?!(?:adres|vp)\.pl\b)" ID="RegularExpressionValidator4" runat="server"/>

«gddg» приводит к «не разрешено», тогда как я ожидаю «недействительно».

Когда я переключаю порядок этих валидаторов, отображаются ошибки «недействительно» и «не разрешено».

<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="invalid" ValidationExpression="^\s*[-+.'\w]+@(?!(?:adres|vp)\.pl\b)\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$" ID="RegularExpressionValidator5" runat="server"/>
<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="not allowed" ValidationExpression="@(?!(?:adres|vp)\.pl\b)" ID="RegularExpressionValidator4" runat="server"/>
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать один шаблон, и вы можете написать свой существующий шаблон как:

^\s*[-+.'\w]+@(?!(?:adres|vp)\.pl\b)\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$

Часть, за исключением adres.pl или vp.pl, может быть записана как @(?!(?:adres|vp)\.pl\b), за исключением тех совпадений, которые идут непосредственно после @.

Вы также можете использовать @(?!(?:adres|vp)\.pl\s*$), если это последняя часть адреса электронной почты, как вы сейчас делаете для этой части \.(?!co\s*$)

См. демонстрация регулярных выражений.

Примечание, что ваш шаблон позволяет использовать начальные и конечные пробельные символы для адреса электронной почты.

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

Adam 10.04.2022 13:51

@Adam Шаблон может либо совпадать, либо не совпадать, в этом случае вам придется использовать 2 шаблона или 1 проверку, чтобы увидеть, содержит ли строка адрес adres.pl или vp.pl.

The fourth bird 10.04.2022 13:55

Спасибо еще раз. Это та вторая часть, где я борюсь. Я хочу, чтобы второй валидатор выдал FAIL, если значение содержит @adres.pl. В настоящее время валидатор возвращает true, если значение содержит «@adres.pl». Я думаю, что мне нужно инвертировать результат этого выражения, например. НЕ("выражение содержит @adres.pl"). Как бы я это сделал? ! оператор, по-видимому, не является обратным в регулярном выражении.

Adam 10.04.2022 14:13

@ Адам Ты пробовал только @(?!(?:adres|vp)\.pl\b) для второго валидатора. Он вернет true, если адресов.pl или vp.pl нет.

The fourth bird 10.04.2022 14:22

Я сделал, пожалуйста, смотрите мое обновление 1.

Adam 10.04.2022 14:28

@ Адам Что, если вы используете весь шаблон ^\s*[-+.'\w]+@(?!(?:adres|vp)\.pl\b)\w+(?:[-.]\w+)*\.(?!co\s‌​*$)\w{2,}\s*$ для второго валидатора? Возможно, вы можете использовать обработчик кликов для второго валидатора и взять строковое значение из источника, который вы хотите проверить, и сделать так, чтобы строка не содержала проверки и вручную установила, действительна ли проверка или нет?

The fourth bird 10.04.2022 16:58

В конце концов, мы получили собственный валидатор, спасибо!

Adam 10.04.2022 18:08

Другие вопросы по теме