代码之家  ›  专栏  ›  技术社区  ›  Mihai Iorga

埃雷吉星号

  •  0
  • Mihai Iorga  · 技术社区  · 14 年前
    //URL START
    $urlregex = "^(https?|ftp)\:\/\/";
    // USER AND PASS
    $urlregex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?";
    // HOSTNAME OR IP
    $urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*";
    // PORT
    $urlregex .= "(\:[0-9]{2,5})?";
    // PATH
    $urlregex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?";
    // GET Query
    $urlregex .= "(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?";
    // ANCHOR
    $urlregex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?\$";
    // check
    if (eregi($urlregex, $url)) {echo "good";} else {echo "bad";}
    

    但是如果我有 http://www.example.com/about-me/my-4*-hotel/

    因为有星号,所以那个电子支票无效。我该怎么办?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Mark Byers    14 年前

    the documentation :

    自php 5.3.0起,此函数已被弃用。不鼓励依赖此功能。

    使用 filter_var 改为使用filter_validate_url。或者如果坚持使用正则表达式,则使用 preg_* .

        2
  •  1
  •   Alan Moore Chris Ballance    14 年前

    我认为你的问题出在url上,而不是regex。上次我检查时,星号不允许出现在 路径 URL的一部分。如果你真的需要一个星号,你应该把它转义:

    http://www.example.com/about-me/my-4%2A-hotel/
    
        3
  •  0
  •   Jens    14 年前

    你可以改变你的regex允许星星…

    $urlregex .= "(\/([a-z0-9+\$_*-].?)+)*\/?";