ヴェドランが最も正しかった。は\d
数字を意味し、大文字は非数字を意味し\D
ます。したがって、次のようになります。
if (preg_match("/\d/i", $_POST['first']) > 0) {
echo '<p class="error">Digits are not allowed, please re-enter.</p>';
$okay = FALSE;
}
上記の意味は...数字が見つかったら...エラーを実行してください。別名: 数字以外のすべてを許可します。
ただし...「数字以外のすべて」を許可するには、アイデアを再考する必要があると思います。通常、ユーザーが引用符や ACII 特殊文字を入力することは望ましくありませんが、入力できるようにしたいようです-!@#$%^&*()_+=|}{\][:;<>?,./~
これは長いリストのように思えますが、可能な文字の完全なリストと比較すると、それほど長くはありません。そのため、より多くの作業が必要に思えますが、次のようにすることをお勧めします。
if (preg_match("/[^-~`!@#$%^&*()+={}|[]\:;<>?,.\w]/i", $_POST['first']) > 0) {
echo '<p class="error">ASCII and Quotes are not accepted, please re-enter.</p>';
$okay = FALSE;
}
これらのチェックの発生 (または発生しない) について文字列内の任意の場所を探しているため、これらのいずれにも Beginning/End-Line 特殊文字はありません。
比較演算子を (if greater than) に変更しました。これは、エラーをスローするのに必要なものが不足していることを探すのではなく、エラーをスローするのに悪いものの存在を探しているからです。
また、最後の正規表現からアンダースコアを削除しました...単語文字 (\w) には数字、文字、およびアンダースコアが含まれているためです。最後に、文字クラスのダッシュは、リストの最初または最後でなければなりません。そうしないと、エラーが発生したり、誤って範囲文字と間違えられたりすることがあります。