我有一个正则表达式,只返回字符串中的数字:
$str = "this is 1 str, 2";
$numb = preg_replace("/[^0-9]/","",$str);
echo $numb; // output: 12
但是如果字符串不包含数字,那么它将不返回任何内容。现在我希望它返回NULL
如果字符串不包含数字。像这样:
$str = "this is one str";
$numb = preg_replace("/[^0-9]/","",$str);
echo $numb; // current output:
// what I want: null
注意: null
不是字符串,应该是这样的:$numb = null;
我该怎么做?
答案 0 :(得分:1)
您无法使用正则表达式 (因为preg_replace
返回字符串,如果遇到错误则返回NULL)。实际上,您需要检查变量并根据需要分配null
:
$numb = $numb ?: null;
答案 1 :(得分:1)
您可以在空值时返回null:
$str = "this is one str";
$numb = preg_replace("/[^0-9]/","",$str);
echo ( ! empty( $numb ) ? $numb : null );
答案 2 :(得分:1)
不是您正在寻找的纯正则表达式解决方案,但这是使用filter_var
执行此操作的解决方法:
定义一个函数:
function isint($val) {
$i=filter_var($val, FILTER_SANITIZE_NUMBER_INT);
return empty($i) ? NULL : $i;
}
然后将其用作:
var_dump( filter_var('Doe, Jane123 Sue', FILTER_CALLBACK, array('options' => 'isint')) );
//=> string(3) "123"
var_dump( filter_var('Doe, Jane Sue', FILTER_CALLBACK, array('options' => 'isint')) );
//=> NULL