복붙노트

[RUBY-ON-RAILS] 검증 URL / 도메인에 대한 정규식을 사용하고 계십니까? (울타리)

RUBY-ON-RAILS

검증 URL / 도메인에 대한 정규식을 사용하고 계십니까? (울타리)

나는 검사가 반드시 도메인을 만들 수있는 검증을 만들기 위해 노력하고 있어요 / URL이 "test.com"예를 들어 유효

def valid_domain_name?
  domain_name = domain.split(".")
  name = /(?:[A-Z0-9\-])+/.match(domain_name[0]).nil?
  tld = /(?:[A-Z]{2}|aero|ag|asia|at|be|biz|ca|cc|cn|com|de|edu|eu|fm|gov|gs|jobs|jp|in|info|me|mil|mobi|museum|ms|name|net|nu|nz|org|tc|tw|tv|uk|us|vg|ws)/.match(domain_name[1]).nil?
  if name == false or tld == false
    errors.add(:domain_name, 'Invalid domain name. Please only use names with letters (A-Z) and numbers (0-9).')
  end
end

이것은 내가 지금까지 가지고 있지만 그것이 작동하지 않는 것입니다. 그것은 실패하지 않고 통해 잘못된 URL을 할 수 있습니다.

나는 아주 잘 정규식 모른다.

해결법

  1. ==============================

    1.이것에 발견 :

    이것에 발견 :

    validates_format_of :domain_name, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
    

    참고 : Rubular 나 당신의 루비 정규 표현식을 테스트하기위한 훌륭한 자원이다

  2. ==============================

    2.테이트의 대답 @ 전체 URL에 대한 좋은,하지만 당신은 도메인 열을 확인하려는 경우, 당신은 허용하지 않으려는 별도의 URL은 예를 들어, 당신은 분명히 경로에있는 URL을 허용하지 않으려는 (자신의 정규 표현식이 허용하는 비트 파일).

    테이트의 대답 @ 전체 URL에 대한 좋은,하지만 당신은 도메인 열을 확인하려는 경우, 당신은 허용하지 않으려는 별도의 URL은 예를 들어, 당신은 분명히 경로에있는 URL을 허용하지 않으려는 (자신의 정규 표현식이 허용하는 비트 파일).

    나는 프로토콜, 포트, 파일 경로,이 결과 정규식의 쿼리 문자열 부분을 제거 그래서 :

    ^ [A-Z0-9] + ([- \. \ {1} [A-Z0-9] +). * \ [A-Z] {2,5} $

    두 버전 모두에 대해 동일한 테스트 케이스를 확인해보세요.

  3. ==============================

    3.

    ^(http|https):\/\/|[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?(\/.*)?$/ix
    

    http://rubular.com/r/cdkLxAkTbk

    추가 옵션 http : // 또는 https : //

    가장 긴 TLD는 6 자이있는, .museum입니다 ...

  4. ==============================

    4.레일이에 또 다른 방법은 URL 유효성 검사를 수행하는

    레일이에 또 다른 방법은 URL 유효성 검사를 수행하는

    validates :web_address, :format => { :with => URI::regexp(%w(http https)), :message => "Valid URL required"}
    
  5. ==============================

    5.

    require 'uri'
    
    def valid_url?(url)
      url.slice(URI::regexp(%w(http https))) == url
    end
    
  6. ==============================

    6.내게는 어떤 작품

    내게는 어떤 작품

    def validate_url(text)
      uri = URI.parse(text)
      raise URI::InvalidURIError unless uri.kind_of?(URI::HTTP) || uri.kind_of?(URI::HTTPS)
      rescue URI::InvalidURIError
        errors.add(:url, 'is invalid')
      end
    end
    
  7. ==============================

    7.난 당신이 무엇을했다했다 내가 만들 수 있도록 수정 한 http : // 또는 https : // 옵션 :

    난 당신이 무엇을했다했다 내가 만들 수 있도록 수정 한 http : // 또는 https : // 옵션 :

    /^((http|https):\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
    
  8. ==============================

    8.구글에 따르면,이 사람은 잘 작동 :

    구글에 따르면,이 사람은 잘 작동 :

    /^([a-z0-9]([-a-z0-9]*[a-z0-9])?\\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])$/i
    

    A는 긴 비트 ...

    당신의 정규 표현식에이처럼의 대소 문자를 구분하지 ... 그것은 보이지 않는,하지만 난 루비를 모른다. 아니면 이전을 대문자로.

  9. ==============================

    9.브라이언 레이의 답변을 사용하는 이상 나는 대답을 생각하는 질문 (도메인이 아닌 URL)와 레일 4를 업데이트.

    브라이언 레이의 답변을 사용하는 이상 나는 대답을 생각하는 질문 (도메인이 아닌 URL)와 레일 4를 업데이트.

    /\A[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}\z/ix
    
  10. ==============================

    10.여기 헨릭의 validates_url_format_of에서 사용하는 정규식 유효성 검사기는 난간입니다 :

    여기 헨릭의 validates_url_format_of에서 사용하는 정규식 유효성 검사기는 난간입니다 :

    REGEXP = %r{
      \A
      https?://                                                          # http:// or https://
      ([^\s:@]+:[^\s:@]*@)?                                              # optional username:pw@
      ( ((#{ALNUM}+\.)*xn---*)?#{ALNUM}+([-.]#{ALNUM}+)*\.[a-z]{2,6}\.? |  # domain (including Punycode/IDN)...
          #{IPv4_PART}(\.#{IPv4_PART}){3} )                              # or IPv4
      (:\d{1,5})?                                                        # optional port
      ([/?]\S*)?                                                         # optional /whatever or ?whatever
      \Z
    }iux
    
  11. ==============================

    11.전체 패턴 읽기 그래서, 그들은 $ ( "와 끝")와 ^ (문자 "로 시작"), 그리고 끝으로 시작되도록 패턴을 조정 해보십시오 "문자열이이로 시작하고 끝"그렇지 않으면, 패턴이 전혀 발견되면 이름과 일치하는, 말, 긍정적 인 경기가 될 것이다 (즉 하나 개의 올바른 문자가 있습니다.)

    전체 패턴 읽기 그래서, 그들은 $ ( "와 끝")와 ^ (문자 "로 시작"), 그리고 끝으로 시작되도록 패턴을 조정 해보십시오 "문자열이이로 시작하고 끝"그렇지 않으면, 패턴이 전혀 발견되면 이름과 일치하는, 말, 긍정적 인 경기가 될 것이다 (즉 하나 개의 올바른 문자가 있습니다.)

  12. ==============================

    12.

    ^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z]{2,3})$
    

    정규식과 도메인 이름 확인

  13. ==============================

    13.이것은 사용하여 내 URL 유효성 검사기입니다 루비의 내장 파서

    이것은 사용하여 내 URL 유효성 검사기입니다 루비의 내장 파서

    class UrlValidator < ActiveModel::EachValidator
      def validate_each(record, attribute, value)
        p = URI::Parser.new
    
        valid = begin
          p.parse(value)
          true
        rescue
          false
        end
    
        unless valid
          record.errors[attribute] << (options[:message] || "is an invalid URL")
        end
      end
    
    end
    
  14. from https://stackoverflow.com/questions/1128168/validation-for-url-domain-using-regex-rails by cc-by-sa and MIT license