Ведран был наиболее правильным. \d
означает цифры, а капитал \D
означает NOT цифры. Таким образом, у вас было бы:
if (preg_match("/\d/i", $_POST['first']) > 0) {
echo '<p class="error">Digits are not allowed, please re-enter.</p>';
$okay = FALSE;
}
Вышеуказанное означает ... Если вы найдете какую-либо цифру ... сделайте свою ошибку. aka: разрешить все, кроме цифр.
ОДНАКО ... Я считаю, что вам нужно переосмыслить свою идею, чтобы позволить «Все кроме цифр». Обычно вы не хотите, чтобы пользователь вводил котировки или специальные символы ACII, но, похоже, вы хотите, чтобы они могли вводить [email protected]#$%^&*()_+=|}{\][:;<>?,./~
Это похоже на длинный список, но по сравнению с полным списком возможных символов он это не так долго. Поэтому, даже если кажется, что больше работы, вы можете сделать это:
if (preg_match("/[^-~`[email protected]#$%^&*()+={}|[]\:;<>?,.\w]/i", $_POST['first']) > 0) {
echo '<p class="error">ASCII and Quotes are not accepted, please re-enter.</p>';
$okay = FALSE;
}
Ни один из них имеет начало/конец-Line специальные символов, потому что вы ищете где-нибудь в строке для любого вхождения в (или нет) этих проверок.
Я изменил оператор сравнения на (если больше), потому что мы не ищем недостатка в чем-то, что требуется для того, чтобы выпустить ошибку, мы ищем существование чего-то плохого, чтобы выбросить ошибку.
Кроме того, я взял подчеркивание из последнего регулярного выражения ... потому что символ слова (\ w) содержит цифры, буквы и символы подчеркивания. Наконец, черта в символьном классе должна быть либо ПЕРВЫЙ, либо ПОСЛЕДНИЙ в списке, или иногда порождает ошибки или случайно ошибочно воспринимается как символ диапазона.
'\ D' или' [^ 0-9] ' –