IT

URL이 유효한지 확인하는 방법

lottoking 2020. 9. 4. 07:42
반응형

URL이 유효한지 확인하는 방법


유효한 URL인지 어떻게 확인할 수 있습니까?

예를 들면 :

http://hello.it => yes
http:||bra.ziz, => no

이것이 유효한 URL이라면 그것이 이미지 파일과 어떤 것인지 확인할 수 있습니까?


URIRuby와 함께 배포 모듈을 사용하십시오 .

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

반응형