RegEx. Не более двух одинаковых последовательных символов и a-Z и 0-9

ИЗМЕНИТЬ

Спасибо за совет, чтобы сделать мой вопрос более ясным:)

Матч ищет 3 последовательных символа: Regex Match = AaA 653219 Regex Match = AA 555 6219

Код Asp.Net 4.0. Вот целая функция:

public ValidationResult ApplyValidationRules()
            {
                ValidationResult result = new ValidationResult();
                Regex regEx = new Regex(@"^(?=.*\d)(?=.*[a-zA-Z]).{8,20}$");

                bool valid = regEx.IsMatch(_Password);
                if (!valid)
                    result.Errors.Add("Passwords must be 8-20 characters in length, contain at least one alpha character and one numeric character");
                return result;

            }



_______________________________________

Я пробовал более 3 часов, чтобы выполнить эту работу, ссылаясь на ниже без везения =/

Как найти повторяющиеся символы с регулярным выражением в Java?

.net Regex для более чем двух последовательных букв

Я начал с этого для 8-20 символов a-Z 0-9:

^(?=.*\d)(?=.*[a-zA-Z]).{8,20}$
As Regex regEx = new Regex(@"^(?=.*\d)(?=.*[a-zA-Z]).{8,20}$");

Я попробовал добавить варианты ниже, не повезло:

/(.)\1{9,}/
.*([0-9A-Za-z])\\1+.*
((\\w)\\2+)+". 

Любая помощь будет очень признательна!

Ответ 1

http://regexr.com?34vo9

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

^(?=.{8,20}$)(([a-z0-9])\2?(?!\2))+$

Первый lookahead ((?=.{8,20}$)) проверяет длину вашей строки. Вторая часть проверяет ваш двойной символ и проверку достоверности:

(
  ([a-z0-9])      Matching a character and storing it in a back reference.
  \2?             Optionally match one more EXACT COPY of that character.
  (?!\2)          Make sure the upcoming character is NOT the same character.
)+                Do this ad nauseum.
$                 End of string.

Хорошо. Я вижу, вы добавили некоторые дополнительные требования. Мой основной форум по-прежнему работает, но мы должны дать вам более пошаговый подход. SO:

^...$

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

(?=.{n,m}$)

Проверка длины. Поместите это в начало вашего регулярного выражения с n как минимальной длиной и m как максимальная длина.

(?=(?:[^REQ]*[REQ]){n,m})

Обязательные символы. Поместите это в начале вашего регулярного выражения с REQ как ваш обязательный символ, чтобы требовать от N до M вашего персонажа. Вы можете отказаться от (?: ..){n,m}, чтобы потребовать только один из этих символов.

(?:([VALID])\1?(?!\1))+

Остальное выражение. Замените VALID на действительные символы. Итак, ваше регулярное выражение пароля:

^(?=.{8,20}$)(?=[^A-Za-z]*[A-Za-z])(?=[^0-9]*[0-9])(?:([\w\d*?!:;])\1?(?!\1))+$

'Splained:

^
  (?=.{8,20}$)                 8 to 20 characters
  (?=[^A-Za-z]*[A-Za-z])       At least one Alpha
  (?=[^0-9]*[0-9])             At least one Numeric
  (?:([\w\d*?!:;])\1?(?!\1))+  Valid Characters, not repeated thrice.
$

http://regexr.com?34vol Здесь новый в действии.

Ответ 2

Мне нужно несколько правил в одном регулярном выражении

• Должно быть 16-значным числом • Не может начинаться с 0 • Не может заканчиваться 0000 • Не может быть одинаковыми номерами (1111111111111111, 2222222222222222 и т.д.) • 7-я цифра на входе не должна содержать номера 8 или 9 • 9-я цифра в ввод может быть только 0 или 1