我有这个正则表达式:
function test($str){
return preg_replace('~[^0-9a-z]+~i', '-',$str);
}
以下是两个例子:
一:
$str = "this is a str!";
echo test($str);
//=> this-is-a-str
如您所见,该正则表达式用-
替换白色间距并删除!
。现在需要获得true
,因为正则表达式符合某些内容。
两个
$str = "this-is-a-str";
echo test($str);
//=> this-is-a-str
如您所见,输出和输入是相同的,这意味着在这种情况下正则表达式不会替换任何内容。现在我需要false
。
其实我正试图找一个正则表达式检查器:) ..!类似于JavaScript中的match()
。有没有PHP功能呢?
答案 0 :(得分:2)
要测试模式是否匹配,您必须使用preg_match
:
function test( $str )
{
$pattern = '~[^0-9a-z]+~i';
if( preg_match( $pattern, $str ) )
{
return preg_replace( $pattern, '-', $str );
}
else return FALSE;
}
编辑:
您还可以使用count
参数来检查替换:
function test( $str )
{
$pattern = '~[^0-9a-z]+~i';
$retval = preg_replace( $pattern, '-', $str, -1, $count );
if( $count ) return $retval;
else return FALSE;
}
$count
参数返回替换次数。
答案 1 :(得分:0)
您可以与原始字符串进行比较,以确定某些内容是否发生了变化。
COPY
此外,您应该考虑使用此正则表达式:
$str = "this is a str!";
var_dump(preg_replace('~[^0-9a-z-]+~i', '-', $str) === $str);
//=> bool(false)
$str = "this-is-a-str";
var_dump(preg_replace('~[^0-9a-z-]+~i', '-', $str) === $str);
//=> bool(true)
在否定字符类中添加连字符,因为您不想单独替换连字符。