在PHP中,如何使用preg_match来匹配除数字以外的所有内容?

在PHP中,如何使用preg_match来匹配除数字以外的所有内容?,php,regex,Php,Regex,这是我的密码: //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

这是我的密码:

//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;
}
//验证名称是否具有正确的字符
如果(preg_match(“/^[a-zA-Z\s-]+$/i,$\u POST['first'])==0){
echo“

您的名字只能包含字母, 破折号或空格。

'; $okay=假; } 如果(preg_match(“/^[a-zA-Z\s-]+$/i,$\u POST['last'])==0){ echo“

您的姓氏只能包含字母, 破折号或空格。

'; $okay=假; }
如何修改此代码,使其接受除数字以外的所有内容

preg_match("/^[^0-9]*$/", $string)

接受除了数字以外的一切。

维德兰是最正确的。
\d
表示数字,大写字母
\d
表示非数字。所以你会:

if (preg_match("/\d/i", $_POST['first']) > 0) {
  echo '<p class="error">Digits are not allowed, please re-enter.</p>';
  $okay = FALSE;
}
if(preg\u match(“/\d/i”,$\u POST['first'])>0){
echo“

不允许使用数字,请重新输入。

”; $okay=假; }
以上的意思是。。。如果你找到任何数字。。。不要犯你的错误。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;
}
if(preg匹配(“/[^-~`!@$%^&*()+={}}【】[]\:;?,.\w]/i“,$\u POST['first']]>0){
echo“

不接受ASCII和引号,请重新输入。

”; $okay=假; }
其中任何一个都没有开始/结束行特殊字符,因为您正在字符串中的任何位置查找这些检查的发生(或不发生)

我将比较运算符改为(如果大于),因为我们不再寻找抛出错误所需的东西的缺乏,而是寻找抛出错误所需的坏东西的存在


另外,我从最后一个正则表达式中去掉了下划线…因为单词字符(\w)包括数字、字母和下划线。最后,字符类中的破折号必须是列表中的第一个或最后一个,否则它有时会抛出错误或意外地误认为是范围字符。

您缺少
^
+
$
@VedranŠego,这取决于要求。如果您想确保字符串不包含任何数字,原始正则表达式
/[^0-9]/
可以。如果需要检查整个字符串是否由数字组成,则需要添加字符。@Arjan
/[^0-9]/
检查字符串中是否至少有一个非数字。而不是它不包含任何数字。使用“my”字符,它检查没有数字,这在我看来似乎是OP想要的“接受除数字以外的一切”。此外,他使用了
/^[…]+$/
测试。@VedranŠego您是对的:)以及您是否需要
/\d/
/^[^\d]$/
取决于是否应接受字符串
test1234
。感谢您的帮助。preg_match对我来说是新的,所以我正在尝试更好地理解语法。我有一个指南,但我不确定如何将我想要的和不想要的串在一起。这对我非常有用!再次感谢您!