Регулярное выражение для проверки, содержит ли оно более 2 повторяющихся символов

#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)}`));