`preg_match` PHP中的整个字符串

时间:2012-11-14 12:11:11

标签: php regex

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

我在这里有一个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。在我的情况下,我使用了一个否定的类。

3 个答案:

答案 0 :(得分:4)

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

  

如果存在非数字字符,则匹配

如果要匹配非数字字符,则必须将正则表达式与整个字符串匹配,并允许任意数量的字符:

^[^\d]+$

答案 1 :(得分:1)

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

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

^$是字符串的开头和结尾。\D表示不是数字的任何内容 - 与\d相反。所以这只匹配非-digits从头到尾。它与空字符串不匹配。如果你想匹配一个空字符串,请将+替换为*

答案 2 :(得分: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'
?>