Javascript 如何检测regex是否有匹配项?

Javascript 如何检测regex是否有匹配项?,javascript,php,regex,Javascript,Php,Regex,我有一个正则表达式: function test($str){ return preg_replace('~[^0-9a-z]+~i', '-',$str); } '~[^0-9a-z-]+~i' 以下是两个示例: One: $str = "this is a str!"; echo test($str); //=> this-is-a-str $str = "this-is-a-str"; echo test($str); //=> this-is-a-str 正如

我有一个正则表达式:

function test($str){
    return preg_replace('~[^0-9a-z]+~i', '-',$str);
}
'~[^0-9a-z-]+~i'
以下是两个示例:

One:

$str = "this is a str!";
echo test($str);
//=> this-is-a-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
$str = "this-is-a-str";
echo test($str);
//=> this-is-a-str
正如您所看到的,输出和输入是相同的,这意味着在这种情况下,regex不会替换任何内容。现在我需要得到
false



事实上,我正试图找到一个正则表达式检查器:)。。!类似于JavaScript中的
match()
。有没有PHP函数可以做到这一点

要测试模式是否匹配,必须使用
preg\u 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
参数返回替换的数量


  • 阅读更多关于
  • 阅读更多关于

要测试模式是否匹配,必须使用
preg\u 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
参数返回替换的数量


  • 阅读更多关于
  • 阅读更多关于

您只需与原始字符串进行比较,即可判断是否有更改

$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)
<> P>另外,您应该考虑使用这个正则表达式:

function test($str){
    return preg_replace('~[^0-9a-z]+~i', '-',$str);
}
'~[^0-9a-z-]+~i'

在求反字符类中添加连字符,因为您不想单独替换连字符。

您只需与原始字符串进行比较,即可确定是否有更改

$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)
<> P>另外,您应该考虑使用这个正则表达式:

function test($str){
    return preg_replace('~[^0-9a-z]+~i', '-',$str);
}
'~[^0-9a-z-]+~i'

在否定字符类中添加连字符,因为您不想单独替换连字符。

请检查所有使用参数。如果这是你所需要的,那么这个问题就很糟糕了。您可以通过检查第5个参数来节省大量时间。第5个参数是计算进行了多少次替换。请检查所有使用的参数。如果这是你所需要的,那么这个问题就很糟糕了。通过检查第5个参数是进行了多少次替换的计数,您可以节省大量时间。我在否定字符类中添加了连字符,这只是一个微小的差异。如果正则表达式很复杂,那么执行两个
preg
函数可能比字符串比较耗时。只有一个微小的差异我添加了连字符否定字符类如果正则表达式很复杂,那么执行两个
preg
函数可能比字符串耗时comparison@stack请阅读更新答案:第二种解决方案更好,并将模式修改为anubhava答案,否则若原始字符串包含“-”Yeah。。。你的第二种方法似乎更好。谢谢你能告诉我在这个
preg\u replace($pattern,'-',$str,-1,$count)
@堆栈中的
-1
是什么吗?你可以阅读堆栈,有时比询问更快!顺便说一句,这意味着没有限制。如果将其设置为1,则只执行1个替换,2=仅执行两个,以此类推。@stack请阅读更新答案:第二个解决方案更好,并将模式修改为anubhava答案,否则如果原始字符串包含“-”Yeah。。。你的第二种方法似乎更好。谢谢你能告诉我在这个
preg\u replace($pattern,'-',$str,-1,$count)
@堆栈中的
-1
是什么吗?你可以阅读堆栈,有时比询问更快!顺便说一句,这意味着没有限制。如果将其设置为1,则仅执行1次更换,2=仅执行两次,以此类推。。。