php preg_match url正则表达式不工作

php preg_match url正则表达式不工作,php,regex,url,preg-match,Php,Regex,Url,Preg Match,我无法使此函数正常工作: function isValidURL($url){ return preg_match('%http://domain\.com/([A-Za-z0-9.-_]+)/([A-Za-z0-9.-_]+)%', $url); } 网址: http://domain.com/anything-12/anything-12/ 可以包含数字、字母和符号 我假设这与第一个正则表达式有关——因为这些都是有效的 http://domain.com/anything12/

我无法使此函数正常工作:

function isValidURL($url){
 return preg_match('%http://domain\.com/([A-Za-z0-9.-_]+)/([A-Za-z0-9.-_]+)%', $url);
}
网址:

http://domain.com/anything-12/anything-12/
可以包含数字、字母和符号

我假设这与第一个正则表达式有关——因为这些都是有效的

    http://domain.com/anything12/anything12/

    http://domain.com/anything12/anything-12/

    http://domain.com/anything12/any-thing-12/

    http://domain.com/anything_12/any-thing-12/
如往常一样,所有的帮助都会被提前感谢和感谢

  • 您需要在正则表达式的字符类中转义
    -

  • 您需要锚定正则表达式,以便尝试匹配整个输入字符串,而不是其中的一部分

  • 修改后的正则表达式是:

    '%^http://domain\.com/([A-Za-z0-9.\-_]+)/([A-Za-z0-9.\-_]+)/$%'
    
    您可以通过注意
    [A-Za-z0-9.]
    \w
    相同来缩短正则表达式,并且还有一个重复的子正则表达式

    '%^http://domain\.com(/[\w.-]+){2}/$%'
    
  • 您需要在正则表达式的字符类中转义
    -

  • 您需要锚定正则表达式,以便尝试匹配整个输入字符串,而不是其中的一部分

  • 修改后的正则表达式是:

    '%^http://domain\.com/([A-Za-z0-9.\-_]+)/([A-Za-z0-9.\-_]+)/$%'
    
    您可以通过注意
    [A-Za-z0-9.]
    \w
    相同来缩短正则表达式,并且还有一个重复的子正则表达式

    '%^http://domain\.com(/[\w.-]+){2}/$%'
    

    我认为它必须是
    (/[\w.-]+){2}
    ,因为OP似乎需要两个子表达式。嗯,它似乎在Google chrome或Safari中不起作用……有什么想法吗?(在FF和IE中运行良好)我认为它必须是
    (/[\w.-]+){2}
    ,因为OP似乎需要两个子表达式。嗯,它在Google chrome或Safari中似乎不起作用……有什么想法吗?(在FF和IE中工作正常)如果要验证url,为什么不使用
    filter\u var($url,filter\u validate\u url)
    而不是正则表达式?或
    解析url()
    。只是好奇。它需要匹配一个域而不是任何域。如果你想验证url,为什么不使用
    filter\u var($url,filter\u validate\u url)
    而不是正则表达式?或
    解析url()
    。只是好奇。它需要匹配单个域,而不是任何域。