Попытка проверить поле имени, чтобы убедиться, что это все альфа-символы или дефис или апостроф

if(!preg_match("/[a-zA-Z'-]/",$First)) { die ("invalid first name");}

приведенные выше флаги вводятся как недопустимые, когда поле является числовым. комбинации букв и цифр проходят нормально. Некоторая помощь здесь для новичка, пожалуйста. спасибо.

Ответ 1

Try:

if(!preg_match("/^[a-zA-Z'-]+$/",$First)) { die ("invalid first name");} 

^ соответствует началу строки, $ соответствует концу строки и + после того, как группа символов означает "один или несколько" совпадающих символов.

Ответ 2

Вы используете только один символ. Вам нужно добавить подстановочный знак, например + (1 или более). Также вы соответствуете где угодно в строке. Вам нужно добавить якоря (^ для начала строки, $ для конца строки), чтобы убедиться в отсутствии недопустимых символов.

if (!preg_match("/^[a-zA-Z'-]+$/", $First)) { die ("invalid first name");}

В качестве альтернативы вы можете искать несогласованный символ:

if (preg_match("/[^a-zA-Z'-]/", $First)) { die ("invalid first name");}

^ внутри квадратных скобок означает "любой символ, который НЕ является одним из них".

Ответ 3

В этом случае лучше искать недопустимые символы, чем пытаться и сопоставлять все символы, после появления одного недопустимого символа поиск может завершаться и возвращаться к ошибке. Это более эффективно, чем всегда сканирование всей строки.

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"); }

Ответ 4

Вы можете попробовать это, если хотите, чтобы 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');
}

Ответ 5

Добавление ударных символов, вероятно, тоже очень умное, так что "Pierre Bézier" может заполнить вашу форму. Добавление:

À-ÿ

.. вашему регулярному выражению это сделает. Что-то вроде этого, со всем включенным:

/^([a-zA-ZÀ-ÿ-' ]+)$/

Ответ 6

Вот решение, с которым я смог придумать. Должна иметь возможность обрабатывать ваши проблемы с проверкой для имен, у которых есть апострофы, hypens и пробелы.

	if(!preg_match('/^([a-zA-Z]+[\'-]?[a-zA-Z]+[ ]?)+$/', $string))

Ответ 7

Если вы используете 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');
}