这件事让我很困惑,原谅我的无知。
我在这里有一个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。在我的情况下,我使用了一个否定的类。
答案 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'
?>