Я искал все здесь и в Интернете для решения этой проблемы.
Проблема в том, что я хочу только принимать письма. Тем не менее, если я введу как минимум одну букву, независимо от того, есть ли символы или цифры, она будет принята. Как я могу получить только буквы?
if (!preg_match("/[a-zA-Z]/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
использование /^[a-zA-Z]+$/
вместо /[a-zA-Z]/
:
if (!preg_match("/^[a-zA-Z]+$/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
Объяснение регулярного выражения:
^
— Чтобы соответствовать началу строки.[]
— Соответствует разрешенным символам.+
— Для соответствия одному или нескольким символам одного типа.$
— Для соответствия конца строки.анкер ваш матч Смотрите этот код:
if ( !preg_match("/^[a-zA-Z]+$/", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
^
а также $
утверждает тарт и конец матча.PS Возможно, в вашем коде неправильно написано «Пожалуйста» — «L» написано заглавными буквами.
Чтобы иметь дело с юникодом, вы должны использовать:
if (!preg_match("/^[- '\p{L}]+$/u", $_POST["firstname"]))
$error = "<br />PLease enter a valid first name";
Я добавил /u
модификатор для юникода и символов - '
для соответствия имени, как Jean-François
Ну, я не эксперт по регулярным выражениям, но вы можете просто создать функцию, которая будет проверять именно то, что вам нужно. Это будет происходить где-то в этом направлении (хотя эта функция проверяет только нижние регистры):
$w = "hereisastr";
$i = 0;
while (isset($w[$i]))
{
if ($w[$i] >= 'a' && $w[$i] <= 'z')
{
$i++;
} else
{
return false;
break;
}
return true;
}