2013-07-31 1 views
0

나는 삽입 HTML을 생성하기 위해 일부 videosites URL을 구문 분석하는 함수를 쓰고 있어요 :preg_match()에 전달하기 전에 strstr()을 사용하여 느슨하게 유효성을 검증해야합니까?

if (strstr($url, 'a.com')) { 
    $from = 'a'; 
} elseif (strstr($url, 'b.com')) { 
    $from = 'b'; 
} else { 
    return 'Wrong Video Url!'; 
} 

if ($from == 'a') { 
    // use preg_match() to retrieve video id to generate embedding html 
    if (preg_match('#^http://a\.com/id_(\w*?)\.html$#', $url, $matches)) { 
     // return video embedding html 
    } 
    return 'Wrong a.com Video Url!';  
} 

if ($from == 'b') { 
    if (preg_match('#^http://b\.com/v_(\w*?)\.html$#', $url, $matches)) { 
     //return video embedding html 
    } 
    return 'Wrong b.com Video Url!'; 
} 

이 같은 b.com URL이있는 경우, 예를 들어, 어떤 상황에서 preg_match()의 호출을 줄일 수있다 strstr()를 사용하여 내 목적 : http://www.b.com/v_OTQ2MDE4MDg.html, preg_match() 번으로 전화하지 않아도됩니다.

그러나 이런 종류의 연습이 좋은지 또는 더 좋은 방법이 있는지 확실하지 않습니다.

+0

'regex'에 대한 도움말 : http://stackoverflow.com/questions/17900004/turn-plain-text-urls-into-active-links-using-php/17900021#17900021 –

답변

3

왜 그냥 교대하지 않습니까? (적어도이 경우.)

'#^http://(?:a\.com/id|b\.com/v)_(\w*?)\.html$#' 

하나 preg_match 및 0 strstr S 있다고.

또한이 경우 큰 위험은 아니지만 도트가되어야 할 때 도트를 벗어나는 것은 일반적으로 좋은 생각입니다. 귀하의 정규 표현식은 "http://bacom/v_id_xhtml" ("id_"(\w*?))으로 일치합니다.

"모든 패턴에 맞는 하나의 패턴"을 만들 수없는 경우 (가독성이 떨어지기 때문에 많은 옵션이있는 경우 실제로는 좋지 않습니다.) 패턴을 사용하여 사이트 이름을 추출한 다음 a switch입니다. 몇 개의 패턴이 있더라도 preg_match 두 개가되고 strstr은 0입니다.

+0

고맙습니다. 이. – samluthebrave

관련 문제