Регулярное выражение не работает с \ и] - PullRequest
1 голос
/ 04 апреля 2019

У меня есть регулярное выражение для проверки пароля, которое должно быть не менее 8 символов и должно содержать буквы (в верхнем и нижнем регистре) и специальный символ из набора ^ $ *.[] {} ()?- "! @ #% & / \,> <':; | _ ~`. </p>

У меня 2 проблемы, после добавления / к reg exp он не распознается (другие символы по-прежнему работают нормально.Если я добавлю /], то выражение больше не будет работать (все неверно, хотя шаблон выглядит нормально в режиме отладки браузера).

Строка регулярного выражения

  static get PASSWORD_VALIDATION_REGEX(): string {
    return '(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])' +  // contains lowercase number uppercase
      '(?=.*[\-~\$@!%#<>\|\`\\\/\[;:=\+\{\}\.\(\)*^\?&\"\,\'])' + // special 
      '.{8,}'; // more than  allowed char
  }

Iиспользовал регулярное выражение в качестве валидатора формы и в качестве совпадения в функции

    password: ['', {validators: [Validators.required,
      Validators.pattern(StringUtils.PASSWORD_VALIDATION_REGEX)
        ],
        updateOn: 'change'
      }
    ]
//....
value.match(StringUtils.PASSWORD_VALIDATION_REGEX)

Пытался использовать только (?=.*[\\]) для списка специальных символов, в этом случае я получил консольную ошибку Invalid regular expression: /^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[\]).{8,}$/: Unterminated character class

Для '(?=.*[\]])' нет ошибки консоли, но в проверке формы 'pattern' присутствует следующая ошибка

actualValue: "AsasassasaX000[[][]"
requiredPattern: "^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[]]).{8,}$"

Сбой того же значения и шаблона https://regex101.com/

СпасибоЗа вашу помощь / предложения заранее!

1 Ответ

1 голос
/ 04 апреля 2019

Вы перезаписали свой шаблон и не смогли правильно экранировать символ ]. В регулярном выражении JavaScript ] внутри класса символов должно быть экранировано.

Если вы не понимаете, как определять escape-символы внутри строкового литерала (и это действительно довольно запутанно), вам следует использовать литерал регулярного выражения. Одна вещь, которую следует помнить об использовании регулярных выражений с Validators.pattern, заключается в том, что строковый шаблон привязывается к угловой структуре, заключая весь шаблон в ^ и $, поэтому эти якоря должны присутствовать, когда вы определяете шаблон как регулярное выражение.

Используйте

static get PASSWORD_VALIDATION_REGEX(): string {
    return /^(?=.*[a-z])(?=.*[0-9])(?=.*[A-Z])(?=.*[-~$@!%#<>|`\\\/[\];:=+{}.()*^?&",']).{8,}$/;
}

Обратите внимание, что \] соответствует символу ] и \\ соответствует \ внутри [...].

...