如果REGEX没有任何匹配,如何设置NULL?

时间:2016-01-05 21:28:53

标签: php regex

我有一个正则表达式,只返回字符串中的数字:

$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;

我该怎么做?

3 个答案:

答案 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