2011-04-12 103 views
0

嗨我需要帮助更改preg_match检查2-16chars A-Z 0-9 -_和空间。现在它的检查URL,所以我需要删除协议,增加空间和2-16分钟/最大码。preg_match援助需要

public function checkUrl($string) 
{ 
    if(empty($string) || preg_match("#^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?#i", $string)) 
    { 
     return true; 
    } 
    else 
    { 
     if(isset($this)) 
     { 
      $this->addError("Input Error"); 
     } 
     return false; 
    } 
} 

回答

3

我不知道你想改变的一部分,但...

[需要匹配] 2-16个字符A-Z 0-9 -_和空间。

[\w- ]{2,16} 
  • \w比赛a-zA-Z0-9_
  • -将与文字-在字符类中的有效范围之外匹配。
  • ' '将匹配一个空格(忽略引号,堆栈溢出需要它们来显示)。要匹配任何空白字符,请使用\s
  • {2,16}将包含在2到16倍之间的量化匹配。
  • 您也可以将(http|https|ftp)更改为(?:https?|ftp),因为您没有使用任何反向引用,所以不会捕获该组。
+0

打我吧。唯一的事情:不要冲刺先到?或者,如果它没有一个有效的范围,它只是被解释为文字? – sdleihssirhc 2011-04-12 01:42:03

+0

@sdleihssirhc在我的测试中比较好:)如果它不是一个有效的范围,它被认为是一个文字。 – alex 2011-04-12 01:43:27

2

According to regular-expressions.info,有一些事情可以做:

  • 包括AZ,az,0-9和_都可以用匹配\w
  • 最小/最大可以用括号{min, max}完成

所以要检查“2-16chars AZ 0-9 -_和空间,”我们不得不做这样的事情:

[- \w]{2,16}