Почему проверка RadDataForm с регулярным выражением всегда дает сбой? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать элемент управления RadDataForm от Telerik для отображения простой формы входа.У меня есть правильная проверка электронной почты, но когда я пытаюсь использовать валидатор RegEx для пароля, он всегда терпит неудачу.Регулярное выражение, которое я использую, использовалось в другом месте без проблем.Я использую тестовый пароль «Tested12», который должен пройти.Чтобы подвести итог теста, строка должна иметь как минимум заглавную букву, строчную букву и число.Длина должна быть не менее 8 символов.

Регулярное выражение:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})

Вот метаданные json, которые я использую для определения поля пароля:

{
    name: 'password',
    displayName: 'Password',
    editor: 'Text',
    validators: [{ 
        name: 'RegEx',
        params: {
            'regEx': '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})',
            errorMessage: 'Passwords must be at least 8 characters long and contain numbers, uppercase letters, and lowercase letters.'
        }
    }]
}

Не думаю, что это имеет значение, но я использую элемент управления из Nativescript UI в проекте Nativescript-Vue.

1 Ответ

0 голосов
/ 30 января 2019

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

Самый простой способ - преобразовать данные проверки длины в шаблон потребления:

'regEx': '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,}'
                                            ^^^^^

На самом деле, вы можете создать более регулярные выражения паролей, если используете принцип контрастности:

'regEx': '^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=[^0-9]*[0-9]).{8,}'

Подробности

  • ^ - начало строки
  • (?=[^a-z]*[a-z]) - (положительный прогноз, который выполняет проверку один раз в началестроки) после 0+ символов, кроме строчных букв ASCII, должна быть строчная ASCII буква
  • (?=[^A-Z]*[A-Z]) - (положительный прогноз, который выполняет проверку один раз в начале строки) после 0+символы, отличные от букв ASCII в верхнем регистре, должны быть буквы ASCII в верхнем регистре
  • (?=[^0-9]*[0-9]) - (положительный прогноз, который выполняет проверку один раз в начале строки) после 0+ символов, отличных от цифры, тамдолжен быть цифрой
  • .{8,} - 8 или более символов, кроме символов разрыва строки.
...