0

这件事真的让我很困惑,原谅我的无知。

我在这里有一个 var $name,我想摆脱数字,我不希望其中包含任何数字。我preg_match()的是这样的:

var_dump(preg_match('/[^\d]/',$name));

测试用例:

$name = "213131"; // int(0) 
$name = "asdda"; // int(1)
$name = "as232dda"; // int(1)

我想要的是也有第三种情况int(0)

我真的很难理解这一点preg_match(),文档说如果模式匹配主题它会返回 1。在我的例子中,我使用了一个否定类。

4

3 回答 3

4

#3 匹配,因为你有字母和数字。你的英语正则表达式基本上说

如果有非数字字符则匹配

如果您只想匹配非数字字符,则必须让正则表达式与整个字符串匹配并允许任意数量的字符

^[^\d]+$
于 2012-11-14T12:13:33.417 回答
1

您的正则表达式仅检查是否存在至少一个非数字。相反,您需要检查它是否只是非数字:

var_dump(preg_match('/^\D+$/',$name));

( ^and$是字符串的开头和结尾。\D表示任何不是数字的东西——与 . 相反\d。所以这只匹配从头到尾的非数字。它不匹配空字符串。如果你想匹配,请+替换为*也是一个空字符串)。

于 2012-11-14T12:14:46.707 回答
0

尝试这个:

<?php
    $string = "as232dda";
    $new_string = trim(str_replace(range(0,9),'',$string));
    echo $new_string;// gives 'asdda'
?>

或函数形式:

<?php
  function remove_numbers($string){
    return(trim(str_replace(range(0,9),'',$string)));
  }

  $string = "as232dda";
  echo remove_numbers($string); // gives 'asdda'
?>
于 2012-11-14T12:14:56.890 回答