这是我的代码:
//Validate names have correct characters
if (preg_match("/^[a-zA-Z\s-]+$/i", $_POST['first']) == 0) {
echo '<p class="error">Your first name must only include letters,
dashes, or spaces.</p>';
$okay = FALSE;
}
if(preg_match("/^[a-zA-Z\s-]+$/i", $_POST['last']) == 0) {
echo '<p class="error">Your last name must only include letters,
dashes, or spaces.</p>';
$okay = FALSE;
}
如何修改此代码,使其接受除数字以外的所有内容?
答案 0 :(得分:2)
韦德兰是最正确的。 \d
表示数字,而大写\D
表示非数字。所以你会:
if (preg_match("/\d/i", $_POST['first']) > 0) {
echo '<p class="error">Digits are not allowed, please re-enter.</p>';
$okay = FALSE;
}
上述方法......如果您发现任何数字......请执行您的错误。 aka:允许除数字之外的所有内容。
但是......我相信你需要重新思考你的想法,允许“除数字之外的一切”。您通常不希望用户输入引号或特殊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特殊字符,因为您正在查找字符串中的任何位置以查找是否出现(或不出现)这些检查。
我将比较运算符更改为(如果大于),因为我们不再寻找缺少抛出错误所需的东西,我们正在寻找存在错误的错误。
另外,我从最后一个正则表达式中取出了下划线...因为单词字符(\ w)包括数字,字母和下划线。最后,字符类中的破折号在列表中必须是FIRST或LAST,或者它有时会抛出错误或者意外地误认为是范围字符。
答案 1 :(得分:1)
preg_match("/^[^0-9]*$/", $string)
除了数字之外,接受所有内容。