2010-02-14 3 views
1

내가 유일한 문제는이URL의 유효성을 검사하는 정규식 - HTTP를 확인하지 않습니까?

/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i 

같은과 웹 주소를 확인하기 위해 여기에 질문 tonns가 알고는, 모든 사람이 사용하는 http:// 또는 내가 사용하는 방법을 찾기 위해 원하는 무엇이든 그래서 앞에 오는하지만 정말 문제, 내가이 그것을 수정하지 않는 이상이하지만 그것은 그것 그것에서 http://를 않는 URL을 거부해야합니다 로 HTTP를 확인 preg_match() 아니라 :

/^[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i 

나는 이러한 조건에 그것을 확인하기 위해 더 많은 기대했다

가 HTTP 경우
  • 다음 .extension가 포함 된 경우 9 다음
  • 를 거부보다 ​​긴 경우 // 또는 www가 다음 그냥이
  • 무시를 마침표없는

누구나 가지고 아이디어, 감사합니다 :)

전과 단계가없는 이유

답변

0

모든 사람은 HTTP를 사용 : // 그들은해야

. 체계가 없으면 단순히 URL이 아니며이를 생략하면 이상한 문제가 발생할 수 있습니다. 예 :

www.example.com:8080/file.txt 

유효하지 않은 구성표 www.example.com:이있는 유효한 URL입니다. 당신이 정상적인 방식은 http:되어야한다고 확신한다면

, 당신은 확인하기 전에, https?:로 시작하지 않는 URL을 '고쳐'에 http://를 추가 자동으로 시도 할 수 있습니다. 그러나 장기간에 걸쳐 스키마없는 URL을 허용/유지/반환해서는 안됩니다.

덧붙여 현재 사용중인 정규 표현식은 공식 URI 구문 (RFC 3986 참조)에 따라 정확한 것으로부터 먼길입니다. IRI의 유니 코드 문자는 말할 것도없고 많은 유효한 URI 문자를 허용하지 않습니다. 적절한 유효성 검사를 원할 경우 실제 URL 파서를 사용해야합니다. 명백한 문제에 대한 빠른 점검을 원한다면 훨씬 더 관대 한 무언가를 사용해야합니다. 예를 들어 공백과 "과 같이 범주 적으로 유효하지 않은 문자가 없는지 확인합니다.

0

regexp가있는 경우 http://을 제거하면됩니까? 동일한 내용이 www에도 적용됩니다. 그것은 당신의 인생을 조금 더 쉽게 만들 수 있습니다.

0
/^(http\://|www\.)/ 

/^.+?\.\S{0,9}\./ 

/\./ 

글 머리 기호를 사용해야합니까?

2

내장 된 filter_var 기능을 사용할 수 없습니까?

filter_var('example.com', FILTER_VALIDATE_URL); 

글자 수 한도가 9 자 이상인 것은 확실하지 않지만 추가 단계에서 쉽게 확인할 수 있습니다.

+0

filter_var는 필터링을 필요로하거나 구성을 요구할 수 있습니다 (http : // 부분, 필요없는 경우 유효성을 검사 할 수 있습니다). 사람들은 바퀴를 재발견하는 것을 좋아합니다. 그리고 그들은 대개 정사각형으로 만듭니다. – Erik

+0

@ Erik. PHP는 FILTER_FLAG_SCHEME_REQUIRED 상수를 제거한 것 같습니다. 적어도 설명서에는 더 이상 없습니다 ... – ThatGuy

관련 문제