2010-12-16 2 views
1

내가 PHP에서 URI를 검증하기 위해이 코드를 사용하고 있습니다 :이 정규식을 수정하여 쿼리 문자열에 빈 매개 변수 값이있는 URI의 유효성을 검사하려면 어떻게해야합니까?

preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $uri) 

그러나, 이것은 등호로 끝나는 URI에 대한 통과하지 않습니다.

http://example.com?query=fish&offset=10이 true를 반환하면 http://example.com?query=fish&offset=이 반환하지 않습니다.

정규식에서 모든 문자를 허용하는 이유는 무엇입니까? 기호.

팁이 있습니까?

감사합니다,

+0

유효한 URL이 아니기 때문에 true를 반환하지 않습니다. 도메인 다음에'/'가 필요합니다. 그 때 그것은 작동 할 것이다. (그래서 버그는 첫 번째 것이'true'를 반환한다는 것입니다) ... – ircmaxell

답변

0

RegEx가 예상대로 작동하지 않습니다.

두 번째 그룹 (.[a-z0-9-]+)*이 (가) 이전에 http://e을 (를) 모두 캡처 중입니다. 그러나 작업하려면 적어도 2 자 이상이 필요하며 욕심이 많으므로 가능한 한 많이 캡처합니다.

대신을 시도 할 필요가있는 경우

^http(s)?://[a-z0-9-]+\.[a-z0-9-]+(\.[a-z0-9-]+)?(/[-a-z0-9=?&/]*)?$

, 당신은 당신의 쿼리 문자열 또는 URI에 포함 할 수있는 문자를 포함하는 마지막 캡처 그룹을 변경합니다.

관련 문제