#regex #angular #angular8 #angular9
#регулярное выражение #angular #angular8 #angular9
Вопрос:
Я проверяю в своей форме проверки, повторяется ли один и тот же символ более двух раз.
Я пробовал это выражение ([a-zA-Z0-9])1{2,} но это не работает должным образом, потому что, если я добавляю aaA, это создает строку, а этого не должно быть, потому что «aaA» разрешено. Также не проверяется, повторяется ли специальный символ.
Вот как я применил свой код:
this.form = this.formBuilder.group(
{
newpassword: new FormControl(
'',
Validators.compose([
Validators.required,
CustomValidators.patternValidator(/[([a-zA-Z0-9])\1{2,}]/, {
hasRepeatedCharacters: true,
}),
])
),
},
{ validators: this.password }
);
Есть идея?
Комментарии:
1.
([a-zA-Z0-9])1{2,}
не будет соответствовать,aaA
если вы не используетеi
флаг-ignorecase. Кроме того, регулярное выражение внутри фрагмента кода действительно странное из-за лишних фигурных скобок и экранирующих косых черт2. Вы ищете повторяющиеся символы в любом месте строки или последовательно?
Ответ №1:
Если я правильно понимаю, что вы считаете недопустимым, вы хотите это:
/(.)1{2,}/
Комментарии:
1. В javascript это работает нормально, но знаете ли вы, как это происходит в typescript? Я протестировал свой код, но он не работает
2. Насколько я знаю, регулярное выражение одинаковое в Typescript, вы получаете какую-то ошибку?
3. Большое вам спасибо!!! Это сработало. Моя проблема заключалась в том, что я добавлял / [] / в начале, а в конце выражения по этой причине не сработало. Итак, конечным решением является CustomValidators.patternValidator(/(.)1{2,}/, { Имеет повторяющиеся символы: true, }),
Ответ №2:
Используйте следующее регулярное выражение для обнаружения любого символа, повторяющегося 2 или более раз:
(.)1{2,}
Для того, чтобы также фиксировать aaA
(повторяющиеся буквы независимо от их регистра), вам нужно добавить флаг без учета регистра i
.
Комментарии:
1. В javascript это работает нормально, но знаете ли вы, как это происходит в typescript? Я протестировал свой код, но он не работает
Ответ №3:
Вы можете использовать /(.)(?=1.*1)/
, предполагая, что вы разрешаете, чтобы повторяющиеся символы не были последовательными:
const pat = /(.)(?=.*1.*1)/;
[
"a",
"aa",
"aaa",
"zba1a1za",
"aaA",
"aaAA",
"aAaAa",
"aAbbAb",
].forEach(e => console.log(`'${e}' => ${pat.test(e)}`));