валидатор регулярных выражений, обязательное поле - PullRequest
2 голосов
/ 23 февраля 2011

Я пытаюсь использовать валидатор регулярного выражения для поля числового идентификатора.Поле должно быть обязательным для любого числа.В настоящее время я использую:

="\d{1,}"

Разве это не должно сделать так, чтобы пользователь должен был хотя бы ввести 1 цифру ??Если я нажимаю кнопку «Отправить» с пустым полем, оно проходит проверку и отправляет сообщения обратно. Но если я введу нечисловые символы, это нормально.Если бы я хотел ноль или более вхождений, я бы использовал: ="(\d{1,})?"Почему это не работает?Нужно ли использовать это в сочетании с Обязательным полевым валидатором?Это было бы отстой> <</p>

Ответы [ 5 ]

4 голосов
/ 23 февраля 2011

Убедитесь, что для свойства ValidateEmptyText установлено значение true, иначе CustomValidator не будет запускаться для пустого текста.

РЕДАКТИРОВАТЬ: вы можете прикрепить функцию javascript к CustomValidator для выполненияэто так как я не думаю, что RegularExpressionValidator сработает против пустого элемента управления.Я создал базовый пример, чтобы проиллюстрировать решение:

<script type="text/javascript">
    function CheckMyText(sender, args) {
        var compare = RegExp("\\d{1,}");
        args.IsValid = compare.test(args.Value);
        return;
    }
</script>

<asp:TextBox ID="txtTest" runat="server"></asp:TextBox>
<asp:Button ID="btnTest" runat="server" Text="Test" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Error!"
    ControlToValidate="txtTest" ValidateEmptyText="true"
    ClientValidationFunction="CheckMyText"></asp:CustomValidator>

Я проверил его, и, похоже, оно работает.Оставьте комментарий, если вам нужна дополнительная помощь.

1 голос
/ 23 февраля 2011

Вам все еще нужно использовать RequiredFieldValidator.

0 голосов
/ 10 ноября 2012

Если кто-то не использует CustomValidator, вы можете иметь RequiredFieldValidator и RegularExpressionValidator для того же элемента управления.Нашел это решение здесь: http://forums.asp.net/t/1230931.aspx.Обычно это приводит к смещению сообщений об ошибках для второго валидатора, но есть способ исправить это.Вам просто нужно установить для свойства Display значение dynamic для обоих валидаторов.Теперь сообщения об ошибках для обоих валидаторов отображаются в одном месте.Пример кода:

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ErrorMessage="ErrorMsg" ControlToValidate="controlID"
ValidationExpression="regexExpression"
Display="Dynamic"></asp:RegularExpressionValidator>

<asp:RequiredFieldValidator ID="RequiredFieldValidator7" runat="server"
ErrorMessage="ErrorMsg" ControlToValidate="controlID"
Display="Dynamic"></asp:RequiredFieldValidator>`
0 голосов
/ 23 февраля 2011

Когда пользователь нажимает кнопку "Отправить", вам нужно убедиться, что не только пустые строки захватываются, ниже приведено регулярное выражение, которое ищет любые пробелы (табуляция, пробел и т. Д.) + Совпадения, если символ не является цифрой (0-9)

 Dim FoundMatch As Boolean
    Try
        FoundMatch = Regex.IsMatch(SubjectString, "\Dm/rld$/\s", RegexOptions.IgnoreCase Or RegexOptions.Multiline)

'put your code here
    Catch ex As ArgumentException

'syntax error in regular expression
    End Try

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

Hth

0 голосов
/ 23 февраля 2011

Я не уверен, где пользователь вводит идентификаторы, но если поле ввода - элемент управления TextBox, почему бы вам не использовать что-то вроде этого:

if (tbID.Text.Length != 0)
{
    //Logic goes here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...