Попытка проверить поле имени, чтобы убедиться, что это все буквенные символы, дефис или апостроф - PullRequest
11 голосов
/ 13 февраля 2010
if(!preg_match("/[a-zA-Z'-]/",$First)) { die ("invalid first name");}

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

Ответы [ 7 ]

20 голосов
/ 13 февраля 2010

Попробуйте:

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

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

4 голосов
/ 13 февраля 2010

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

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

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

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

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

3 голосов
/ 13 февраля 2010

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

if (preg_match("/[^A-Za-z'-]/", $First)) { die ("invalid first name"); }

^ внутри набора [] позволяет ему соответствовать всему, что не входит в набор. и поскольку строка недопустима, если у нас есть хотя бы один недопустимый символ, для набора нет необходимости иметь оператор повторения.

Еще лучше было бы более полезное сообщение об ошибке

if (preg_match("/[^A-Za-z'-]/", $First, $Inv)) { die ("{$Inv[0]} not allowed in first name"); }
1 голос
/ 30 мая 2013

Добавление символов с акцентом, вероятно, тоже разумно, так что «Пьер Безье» может заполнить вашу форму. Добавление:

À-ÿ

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

/^([a-zA-ZÀ-ÿ-' ]+)$/
1 голос
/ 03 сентября 2012

Вы можете попробовать это, если вы хотите, чтобы ФИО, например. "ДЖОН РАМБО"

Пока 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');
}
0 голосов
/ 15 февраля 2016

Если вы используете if (!preg_match("/^[a-zA-Z'-]+$/", $firstName)) {, оно также будет совпадать, если произошла ошибка, например, неправильное регулярное выражение, потому что ! соответствует обоим возвращаемым значениям FALSE и 0.

Из руководства по PHP : 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');
}
0 голосов
/ 25 октября 2014

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

	if(!preg_match('/^([a-zA-Z]+[\'-]?[a-zA-Z]+[ ]?)+$/', $string))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...