2014-09-09 13 views
1

정규식은 특히 긴 URL에 대해 매우 혼란 스럽습니다. 다음은 URL을 검사하고 $ msg 변수에 사용자 정의 메시지를 저장하는 코드입니다. 이 예제에서는 facebook을 제외한 모든 URL을 허용합니다. 나는 약간의 변화가 필요하다.특정 URL을 허용하는 정규식

그것은 모든 URL, 그것은 허용되어야 비디오

if(some url website link){ 
     $msg = 'url allowed'; 
    }elseif(preg_match("|^http(s)?://(www.)?facebook.([a-z]+)/(.*)?$|i", $url)){ 
     $msg = 'url NOT allowed'; 
    }else{some other url test 
} 

https://www.facebook.com/video.php?v=100000000000000을 가지고있는 사람을 제외하고 페이스 북의 URL을 허용해서는 안 허용해야합니다. 나는 페이스 북의 비디오 URL 만 허용하고 페이스 북의 다른 URL은 허용하지 않는 정규식을 작성하는 법.

내가 너무 좋아 하나보다 FB의 URL을이 작업을 수행 할 수 https://www.facebook.com/username/posts/100000000000000

당신에게 감사 (수 있어야합니다)

+0

당신은 알 수 없습니다, 후자의 URL이 비디오 나하지, 그래서 문제에도 유효한 정규식을 생각하기 전에 시작합니다. – rinukkusu

+0

facebook.com/video.php 다음에 임의의 문자열이 오는 것은 비디오 URL이됩니다. 마찬가지로 facebook.com에 이어 몇 가지 사용자 이름 뒤에 게시물이 나오면 임의의 숫자가 게시물 URL이됩니다. 동영상 및 게시 URL 이외의 다른 Facebook 주소는 허용되지 않아야합니다. – user3736026

답변

2

당신은 비디오 또는 상태가 아닌 모든 facebook.com URL을 일치하도록 다음과 같은 정규식을 사용할 수 있습니다 업데이트 :

^http(s)?://(www\.)?facebook.([a-z]+)/(?!(?:video\.php\?v=\d+|username/posts/\d+)).*$

설명 :

^     # Assert position at the beginning of the line 
http(s)?://   # The protocol information 
(www\.)?    # Match 'www.' 
facebook\.   # Match 'facebook.' 
([a-z]+)    # Match the TLD 
/     # A literal forward slash '/' 
(?!     # If not followed by: 
(?:     # Start of non-capturing group 
video\.php\?v=\d+ # a video URL 
|     # OR 
username/posts/\d+ # a status update URL 
)     # End of non-capturing group 
)     # End of negative lookahead 
.*     # Match everything until the end if above condition true 
$     # Assert position at the end of the line 

RegEx Demo

+0

멋진 정보. 정말 감사합니다. 각 매개 변수를 이해하려면이 과정을 거쳐야합니다. 나는 너에게 다시 올 것이다. 고맙습니다. – user3736026

+0

그것이 다른 방향으로 된 것처럼 보입니다. 나는이 표현이 오직 비디오 만 허용하고 다른 것은 게시 할 수 없지만 developers.facebook.com, /photo.php?fbid=100000000000000,/about,/help,/mobile,/badges,/directory,/career를 허용한다고 가정하고 있습니다. ,/정책,/정책 .php,/법,/개인 정보 보호 ... 거의 모든 것. 정규 표현식을 비디오 및 게시물 만 수락 할 수 있습니까? facebook.com 또는 facebook.com/anything을 허용해서는 안됩니다. /video.php?v=100000000000000 및/someusername/posts/100000000000000 만 허용되어야합니다. – user3736026

+0

@ user3736026 : 예, 그렇게 작성했습니다. 정규식 위의 메모를 참조하십시오 : "** 모든 ** ** ** 비디오 또는 상태 업데이트 *"인 모든 facebook.com URL과 일치하십시오. 따라서 동영상과 게시물 만 일치 시키려면 다음을 수행하십시오. if (! preg_match ('regex', $ url)) {...}'. 부정 '!'에 유의하십시오. –