RegExr с минимум 2 буквы и необязательные буквы, но нет других букв? - PullRequest
5 голосов
/ 05 июля 2019

Я хочу регулярное выражение для текста, которое позволяет, если по крайней мере 1 слово с 2 буквами находится внутри, и минимум 25 букв или цифр, а также разрешить (0-9äöü,. '-), если есть другие буквы или цифры, должно быть выдано сообщение об ошибке.


Пример:

правильно:

  • Джон Доу
  • Макс Мюстерманн
  • Джон-Фрэнк Доу.

false:

  • Джон / Доу

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

  • Wordregex: ([az] {2}) \ w +
  • разрешено. Элементы: [äöü0-9 ,. '-]
  • макс. Длина: {25 999}
if(preg_match("/([A-Za-z]{2})\w+/",$text)){
    if(!preg_match("/[a-zäöüA-ZÄÖÜ,.' -]/g",$text)){echo 'error';}
else{echo'error';}

Я не уверен, как получить решение в коде.

1 Ответ

8 голосов
/ 05 июля 2019

Что вы можете сделать, это использовать положительный прогноз, чтобы указать длину 25 - 999, а также утверждать, что существует 2 последовательных [a-z]

Затем сопоставьте класс вашего персонажа [a-zA-Z0-9äöü,.' -]+ с разрешенными предметами, добавив к нему a-z и A-Z.

^(?=.{25,999})(?=.*[a-z]{2})[a-zA-Z0-9äöü,.' -]+$
  • ^ Начало строки
  • (?=.{25,999}) Позитивный взгляд, утверждаю 25 - 99 символов
  • (?=.*[a-z]{2}) Позитивный взгляд, утверждаю 2 раза [a-z]
  • [a-zA-Z0-9äöü,.' -]+ Соответствует любому из перечисленных 1+ раз
  • $ Конец строки

Regex demo | Php demo

Например (я сделал строки длиннее, чтобы учесть минимальную длину 25)

$strings = [
    "This is a text with John Doe",
    "This is a text with Max Müstermann ",
    "This is a text withJohn-Frank' Doe.",
    "This is a text with John/Doejlkjkjlk",
];
$pattern = "/^(?=.{25,999})(?=.*[a-z]{2})[a-zA-Z0-9äöü,.' -]+$/";
foreach ($strings as $string) {
    if (preg_match($pattern, $string)) {
        echo "Ok ==> $string" . PHP_EOL;
    } else {
        echo "error" . PHP_EOL;
    }
}

Результат

Ok ==> This is a text with John Doe
Ok ==> This is a text with Max Müstermann 
Ok ==> This is a text withJohn-Frank' Doe.
error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...