2011-04-12 125 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}