Ответ 1
Try:
if(!preg_match("/^[a-zA-Z'-]+$/",$First)) { die ("invalid first name");}
^
соответствует началу строки, $
соответствует концу строки и +
после того, как группа символов означает "один или несколько" совпадающих символов.
if(!preg_match("/[a-zA-Z'-]/",$First)) { die ("invalid first name");}
приведенные выше флаги вводятся как недопустимые, когда поле является числовым. комбинации букв и цифр проходят нормально. Некоторая помощь здесь для новичка, пожалуйста. спасибо.
Try:
if(!preg_match("/^[a-zA-Z'-]+$/",$First)) { die ("invalid first name");}
^
соответствует началу строки, $
соответствует концу строки и +
после того, как группа символов означает "один или несколько" совпадающих символов.
Вы используете только один символ. Вам нужно добавить подстановочный знак, например +
(1 или более). Также вы соответствуете где угодно в строке. Вам нужно добавить якоря (^
для начала строки, $
для конца строки), чтобы убедиться в отсутствии недопустимых символов.
if (!preg_match("/^[a-zA-Z'-]+$/", $First)) { die ("invalid first name");}
В качестве альтернативы вы можете искать несогласованный символ:
if (preg_match("/[^a-zA-Z'-]/", $First)) { die ("invalid first name");}
^
внутри квадратных скобок означает "любой символ, который НЕ является одним из них".
В этом случае лучше искать недопустимые символы, чем пытаться и сопоставлять все символы, после появления одного недопустимого символа поиск может завершаться и возвращаться к ошибке. Это более эффективно, чем всегда сканирование всей строки.
if (preg_match("/[^A-Za-z'-]/", $First)) { die ("invalid first name"); }
the ^ внутри множества [] делает его совпадающим со всем, что не входит в набор. и поскольку строка недействительна, если у нас есть хотя бы один недопустимый символ, нет необходимости, чтобы набор имел оператор повторения.
Еще лучше было бы более полезное сообщение об ошибке
if (preg_match("/[^A-Za-z'-]/", $First, $Inv)) { die ("{$Inv[0]} not allowed in first name"); }
Вы можете попробовать это, если хотите, чтобы FULL NAME, например. "ДЖОН РАМБО"
Пока HTML FORM.PHP
<div class="error"><?php echo $error['name']; ?></div>
<input name="name" type="text" value="<?php echo $input['name']; ?>" class="inputf">
СТАТИСТИЧЕСКАЯ СТРАНИЦА PHP
if(!preg_match("/^[a-zA-Z'-]/", $input['name']))
{
// name is in-valid
$error['name'] = 'Invalid Name';
include('views/form.php');
}
Добавление ударных символов, вероятно, тоже очень умное, так что "Pierre Bézier" может заполнить вашу форму. Добавление:
À-ÿ
.. вашему регулярному выражению это сделает. Что-то вроде этого, со всем включенным:
/^([a-zA-ZÀ-ÿ-' ]+)$/
Вот решение, с которым я смог придумать. Должна иметь возможность обрабатывать ваши проблемы с проверкой для имен, у которых есть апострофы, hypens и пробелы.
if(!preg_match('/^([a-zA-Z]+[\'-]?[a-zA-Z]+[ ]?)+$/', $string))
Если вы используете if (!preg_match("/^[a-zA-Z'-]+$/", $firstName)) {
, он также будет соответствовать, если произошла ошибка, например недопустимое регулярное выражение, поскольку !
соответствует как возвращаемым значениям FALSE
, так и 0
.
Из PHP Manual:
preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred.
Таким образом, лучший способ убедиться, что имя соответствует вашим требованиям:
if (preg_match("/^[a-zA-Z'-]+$/", $firstName) === 1) {
die('Valid name');
} else {
die('Invalid name or error');
}