2011-04-12 2 views
0

안녕하세요 저는 2-16chars A-Z 0-9 -_ 및 공간을 확인하기 위해 preg_match를 변경하는 데 도움이 필요합니다. 바로 지금 그것의 확인 URL 그래서 프로토콜을 제거하고, 공간과 2-16 분/최대 chr을 추가 할 필요가 있습니다.preg_match assistance needed

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-z, A-Z, 0-9_.
  • -은 유효한 범위를 벗어나는 문자 클래스의 문자 -과 일치합니다.
  • ' '은 공백과 일치합니다 (따옴표 무시, 스택 오버플로가 필요함). 공백 문자를 일치 시키려면 \s을 사용하십시오.
  • {2,16}은 일치 항목을 2 회에서 16 회 사이로 정량합니다.
  • 역 참조를 사용하지 않으므로 (http|https|ftp)(?:https?|ftp)으로 변경하여 그룹을 캡처하지 않을 수도 있습니다.
+0

나를 이길. 단 한 가지 : 대쉬가 먼저 오지 않아도 되나요? 또는 유효한 범위를 만들지 않으면 리터럴로 해석됩니까? – sdleihssirhc

+0

@sdleihssirhc 내 테스트에서 잘 맞습니다 :) 유효한 범위가 아니면 리터럴로 간주됩니다. – alex

2

According to regular-expressions.info, 몇 가지 당신이 할 수 있습니다 :

  • AZ, AZ, 0-9, 및 _ 모두와 일치 할 수 \w
  • 민/최대 괄호 {min, max} 수행 할 수 있습니다

그래서를 확인하기 위해는 "아즈 0-9 -_과 공간을 2-16chars"우리는 이런 식으로 뭔가를해야 할 것 :

[- \w]{2,16}