URL이 유효한지 확인하는 방법
유효한 URL인지 어떻게 확인할 수 있습니까?
예를 들면 :
http://hello.it => yes
http:||bra.ziz, => no
이것이 유효한 URL이라면 그것이 이미지 파일과 어떤 것인지 확인할 수 있습니까?
URI
Ruby와 함께 배포 된 모듈을 사용하십시오 .
require 'uri'
if url =~ URI::regexp
# Correct URL
end
마찬가지로 알렉산더 귄터는 의견을 밝혔다 문자열이 경우, 검사 그것은 포함 URL을.
문자열 이 URL 인지 확인하려면 다음을 사용하십시오.
url =~ /\A#{URI::regexp}\z/
웹 URL ( http
또는 https
) 만 확인 비용을 사용하십시오.
url =~ /\A#{URI::regexp(['http', 'https'])}\z/
위의 답변과 유사하게는 약간 더 정규식을 사용하면 약간 더 있습니다.
URI::DEFAULT_PARSER.regexp[:ABS_URI]
URI.regexp
어떤 공백을 허용하는 존재 공백이있는 URL은 무효화 됩니다.
최근에 다른 URI rgexp에 대해 제공되는 바로 가기를 찾았습니다. 에서 URI::DEFAULT_PARSER.regexp.keys
직접 액세스 할 수 있습니다 URI::#{key}
.
예를 들어 :ABS_URI
정규 여기에서 액세스 할 수 있습니다 URI::ABS_URI
.
현재 답변의 문제은 URI가 URL이 아니라는 것 입니다.
URI는 로케이터, 이름 또는 둘 다로 추가로 분류 될 수 있습니다. "Uniform Resource Locator"(URL) 용어는 리소스를 이미지하는 것 외에도 기본 액세스 기능 (예 : 네트워크 "위치")을 설명하여 리소스를 찾는 수단을 제공하는 URI의 하위 집합을 의미합니다.
URL은 URI의 하위 집합에서 URI에 대한 일치는 연속하는 값과에서 일치하는 것입니다. 예를 들어 URN은 다음과 가변합니다.
"urn:isbn:0451450523" =~ URI::regexp
=> 0
즉, 내가 아는 한 Ruby에는 URL을 구문 분석하는 기본 방법이 필요한 것입니다. 특별히 HTTP 또는 HTTPS 형식의 URL을 일치하는 경우 다음과 같이 할 수 있습니다.
uri = URI.parse(my_possible_url)
if uri.kind_of?(URI::HTTP) or uri.kind_of?(URI::HTTPS)
# do your stuff
end
나는 주소 지정이 가능한 보석을 선호합니다 . URL을보다 지능적으로 처리한다는 것을 알게되었습니다.
require 'addressable/uri'
SCHEMES = %w(http https)
def valid_url?(url)
parsed = Addressable::URI.parse(url) or return false
SCHEMES.include?(parsed.scheme)
rescue Addressable::URI::InvalidURIError
false
end
계속해서 오래된 오래된 항목이지만 계속해서 기여할 생각했습니다.
String.class_eval do
def is_valid_url?
uri = URI.parse self
uri.kind_of? URI::HTTP
rescue URI::InvalidURIError
false
end
end
이제 다음과 같이 할 수 있습니다.
if "http://www.omg.wtf".is_valid_url?
p "huzzah!"
end
나를 위해 다음 정규식을 사용합니다.
/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
선택권 :
i
-대소 문자 구분 안함x
-정규식의 공백 무시
이 방법을 설정하여 URL 유효성 검사를 확인할 수 있습니다.
def valid_url?(url)
url_regexp = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
url =~ url_regexp ? true : false
end
그것을 사용하십시오 :
valid_url?("http://stackoverflow.com/questions/1805761/check-if-url-is-valid-ruby")
잘못된 URL로 테스트 :
http://ruby3arabi
-결과가 잘못되었습니다.http://http://ruby3arabi.com
-결과가 잘못되었습니다.http://
-결과가 잘못되었습니다.
올바른 URL로 테스트 :
http://ruby3arabi.com
-결과가 유효합니다http://www.ruby3arabi.com
-결과가 유효합니다https://www.ruby3arabi.com
-결과가 유효합니다https://www.ruby3arabi.com/article/1
-결과가 유효합니다https://www.ruby3arabi.com/websites/58e212ff6d275e4bf9000000?locale=en
-결과가 유효합니다
일반적으로
/^#{URI::regexp}$/
잘 작동하지만 http
또는 일치하는 경우에만 https
옵션으로 메소드에 있습니다.
/^#{URI::regexp(%w(http https))}$/
.NET과 같은 프로토콜을 거부하려는 경우 약간 더 잘 작동하는 경향이 있습니다 ftp://
.
이것은 조금 오래되었지만 여기에 내가하는 방법입니다. Ruby의 URI 모듈을 사용하여 URL을 구문 분석하십시오. 파싱 할 수 있으면 유효한 URL입니다. (그러나 그것이 접근 가능하다는 것을 의미하지는 않습니다.)
URI는 많은 체계를 지원하며 사용자 지정 체계를 직접 추가 할 수 있습니다.
irb> uri = URI.parse "http://hello.it" rescue nil
=> #<URI::HTTP:0x10755c50 URL:http://hello.it>
irb> uri.instance_values
=> {"fragment"=>nil,
"registry"=>nil,
"scheme"=>"http",
"query"=>nil,
"port"=>80,
"path"=>"",
"host"=>"hello.it",
"password"=>nil,
"user"=>nil,
"opaque"=>nil}
irb> uri = URI.parse "http:||bra.ziz" rescue nil
=> nil
irb> uri = URI.parse "ssh://hello.it:5888" rescue nil
=> #<URI::Generic:0x105fe938 URL:ssh://hello.it:5888>
[26] pry(main)> uri.instance_values
=> {"fragment"=>nil,
"registry"=>nil,
"scheme"=>"ssh",
"query"=>nil,
"port"=>5888,
"path"=>"",
"host"=>"hello.it",
"password"=>nil,
"user"=>nil,
"opaque"=>nil}
URI 모듈에 대한 자세한 정보 는 문서 를 참조하십시오 .
이 정규식이 정확하다고 가정하면 http://www.geekzilla.co.uk/View2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm 과 같은 정규식을 사용할 수도 있습니다 (완전히 확인하지 않았습니다). URL의 유효성을 보여줍니다.
url_regex = Regexp.new("((https?|ftp|file):((//)|(\\\\))+[\w\d:\#@%/;$()~_?\+-=\\\\.&]*)")
urls = [
"http://hello.it",
"http:||bra.ziz"
]
urls.each { |url|
if url =~ url_regex then
puts "%s is valid" % url
else
puts "%s not valid" % url
end
}
위의 예제는 다음을 출력합니다.
http://hello.it is valid
http:||bra.ziz not valid
참고 URL : https://stackoverflow.com/questions/1805761/how-to-check-if-a-url-is-valid
'IT' 카테고리의 다른 글
Android CollapsingToolbarLayout 축소 리스너 (0) | 2020.09.04 |
---|---|
Python을 사용하여 폴더에서 최신 파일을 가져 오는 방법 (0) | 2020.09.04 |
지난주 데이터를 선택하는 MySQL 쿼리? (0) | 2020.09.04 |
Node.js 앱은 포트를 차단하는 다른 프로세스가 없더라도 포트 80에서 사용할 수 없습니다. (0) | 2020.09.04 |
Python에서 람다 식 내부 할당 (0) | 2020.09.04 |