Поймать повторяющиеся буквы в PHP - Регулярные выражения - PullRequest
5 голосов
/ 25 октября 2011

Я должен проверить ввод пользователя, чтобы убедиться, что имя, фамилия (и т. Д.) Введены правильно и действительны. Я должен построить регулярное выражение, которое проверяет, вводит ли пользователь повторяющиеся буквы в имени, фамилии и т.д ...

Пример:

  • AAAron = плохо из-за 3 A
  • AAron = хорошо
  • Ханна = Хорошо
  • Ханна = плохо из-за 3 N

Существует ли регулярное выражение PHP для отлова этих случаев? (У меня есть базовые знания регулярных выражений, но это слишком много для меня)

EDIT: Это должно также разрешить цифры: Дэвид 3 или III

Спасибо

Ответы [ 2 ]

14 голосов
/ 25 октября 2011

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

preg_match('/(\w)(\1+)/', $subject, $matches);
print_r($matches);

означает \1, повторяет первый захват, поэтому в этом случае \w.

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

т.е.

$charCountArray = array();
foreach ($name as $char) {
    $charCountArray[$char]++;
}

обратная ссылка - это расширенная функция, к счастью, функции PCRE ее поддерживают.

Примечание: preg_match будет соответствовать только одной последовательности, если вам нужно знать все совпадения, используйте preg_match_all

5 голосов
/ 25 октября 2011

Попробуйте это регулярное выражение:

/(\w)\1{2}/
...