preg_match Letters Не только буквы?

Я искал все здесь и в Интернете для решения этой проблемы.

Проблема в том, что я хочу только принимать письма. Тем не менее, если я введу как минимум одну букву, независимо от того, есть ли символы или цифры, она будет принята. Как я могу получить только буквы?

if (!preg_match("/[a-zA-Z]/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";

0

Решение

использование /^[a-zA-Z]+$/ вместо /[a-zA-Z]/:

if (!preg_match("/^[a-zA-Z]+$/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";

Объяснение регулярного выражения:

  • ^ — Чтобы соответствовать началу строки.
  • [] — Соответствует разрешенным символам.
  • + — Для соответствия одному или нескольким символам одного типа.
  • $ — Для соответствия конца строки.
3

Другие решения

анкер ваш матч Смотрите этот код:

if ( !preg_match("/^[a-zA-Z]+$/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
  • ^ а также $ утверждает тарт и конец матча.

PS Возможно, в вашем коде неправильно написано «Пожалуйста» — «L» написано заглавными буквами.

0

Чтобы иметь дело с юникодом, вы должны использовать:

if (!preg_match("/^[- '\p{L}]+$/u", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";

Я добавил /u модификатор для юникода и символов - ' для соответствия имени, как Jean-François

0

Ну, я не эксперт по регулярным выражениям, но вы можете просто создать функцию, которая будет проверять именно то, что вам нужно. Это будет происходить где-то в этом направлении (хотя эта функция проверяет только нижние регистры):

$w = "hereisastr";
$i = 0;
while (isset($w[$i]))
{
if ($w[$i] >= 'a' && $w[$i] <= 'z')
{
$i++;
} else
{
return false;
break;
}
return true;
}
-1
По вопросам рекламы [email protected]