2011-11-28 2 views
0
^(https?:\/\/([a-zA-Z0-9\-]{1,64}\.){0,127}([a-zA-Z0-9\-]{3,64})\.\w{2,4}(\/.*)?)?$ 

웹 사이트 URL (IP, 포트, 사용자 이름/비밀번호 없음) 만 일치하면됩니다. 이 정규 표현식에 치명적인 결함이 있습니까?웹 사이트 URL에 대해이 정규식을 향상시킬 수있는 방법이 있습니까?

편집 :는 여기에 약간 한 개선의 :

^(https?:\/\/([a-zA-Z0-9\-]{1,64}\.){0,127}([a-zA-Z0-9\-]{1,64})\.\w{2,7}(\/.*)?)?$ 

내가 그 도메인 이름은 시작과 끝에 대시를 사용할 수 없습니다 깨달았다. 대시로 시작하거나 끝나는 도메인을 일치시키지 않는 간단한 방법이 있습니까?

+0

'http : // test.co.uk /'또는'http : // example.museum /'와 일치하지 않습니다. – JiminP

답변

0

첫 번째 부분에서는 매우 제한적이며, 마지막 부분에서 아무것도 허용하는 문자 인 개행 문자 만 허용합니다 (예 : [a-zA-Z0-9\-]).

==> 첫 번째 부분에는 많은 유효한 문자가 누락되어 있으며 마지막 부분에는 문자열의 끝까지 아무것도 일치하지 않습니다.

왜 단순화하고 http으로 시작하고 끝까지 공백이없는 항목과 일치합니까?

^https?:\/\/\S+$ 

도메인 이름의 시작/끝 대시를 피하려면 두 번째 표현식에서 찾아보기를 사용하십시오. 나는 또한 당신이 ()? 주변과의 완전한 표현이 옵션 만든 왜 here online on Regexr

를 참조 \S*

^(https?:\/\/([a-zA-Z0-9\-]{1,64}\.){0,127}((?!-)[a-zA-Z0-9\-]{1,64})(?<!-)\.\w{2,7}(\/\S*)?)?$ 

으로 .*를 교체했다. 따라서 빈 문자열에도 일치합니다.

관련 문제