Лучший способ проверить определенные слова в текстовом поле в ASP.Net C#

#c# #jquery #asp.net #regex #validation

Вопрос:

У меня есть текстовое поле PIN-кода, в котором мне нужно запустить проверку, если пользователь ввел неверный PIN-код, например 111111 или 000000. Уже пробовал использовать CustomValidator с вызовом JS, но сообщение «Недопустимый PIN-код» не исчезает после ввода действительного PIN-кода. Поэтому я проверяю, можно ли это сделать в элементах управления проверкой, таких как RegularExpressionValidator. Мой вопрос в том, можем ли мы добавить определенные слова в выражение проверки? Если да, то каково выражение проверки, чтобы предотвратить появление нескольких слов?

Мой файл aspx

 <asp:CustomValidator ID="cvNewPIN" runat="server" 
     SetFocusOnError="true" ClientValidationFunction="IsPINValid" 
     ErrorMessage="Invalid PIN" ForeColor="Red" Font-Size="Small" 
     Display="Dynamic">Invalid PIN</asp:CustomValidator>

<asp:TextBox ID="txtPIN" runat="server" 
     TextMode="Password" CssClass="form-control" MaxLength="6"></asp:TextBox>
 

jQuery

 function IsPINValid(sender, args) {
    args.IsValid = true;

    var invalidPINs = "111111,000000";
    var arrInvalidPINs = invalidPINs.split(',');
    if (arrInvalidPINs.indexOf($('#<%=txtPIN.ClientID %>') > - 1)) {
        args.IsValid = false;
    }
}
 

Комментарии:

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

2. Я отредактировал свой вопрос. Было бы полезно, если бы кто-нибудь мог предоставить регулярное выражение для предотвращения списка слов. Я ничего не могу найти по этому поводу, но я все еще ищу. Спасибо

3. Вы используете здесь веб-формы? это взрыв из прошлого 🙂

4. Да, я использую здесь веб-формы. Это старая система, которую я совершенствую

Ответ №1:

Проблема у вас есть следующее утверждение всегда верно

  if (arrInvalidPINs.indexOf($('#<%=txtPIN.ClientID %>') > - 1))
 

Вам нужно проверить val текстовое поле следующим образом:

 if (arrInvalidPINs.indexOf($('#<%=txtPIN.ClientID %>').val()) > - 1) {
    args.IsValid = false;
}
 

Комментарии:

1. Спасибо, что указали на это. Я обновил свой сценарий, но проблема по-прежнему в том, что сообщение об ошибке пользовательского валидатора не исчезает, даже если я ввел действительный PIN-код. Никаких проблем с обработкой ошибок нет, просто поведение CustomValidator может привести к путанице. То, что я только что сделал, — это установил дисплей=»Динамический» в значение «Нет», чтобы он больше не отображал красное сообщение. Теперь это будет только всплывающее сообщение. Спасибо!

2. Вам , возможно, потребуется добавить ControlToValidate="txtPIN" к вашему CustomValidator , не могли бы вы попробовать это, если это сработает? <asp:CustomValidator ID="cvNewPIN" runat="server" ControlToValidate="txtPIN" SetFocusOnError="true" ClientValidationFunction="IsPINValid" ErrorMessage="Invalid PIN" ForeColor="Red" Font-Size="Small" Display="Dynamic">Invalid PIN</asp:CustomValidator>