2011-02-17 6 views
0

정규식을 사용하여 하나 이상의 메일을 검증하려고하지만이 속성은 어떤 모델에도 속하지 않습니다. 내가 http://www.rubular.com/이 정규식을 테스트 할 때 나는 나쁜 (더 일치)입니다이 문자열 [email protected]의 AA, [email protected]을 평가일치 방법의 정규식 문제

def emails_are_valid?(emails) 
    #regex with validation 
    regex = Regexp.new("^(\s*[a-zA-Z0-9\._%-][email protected][a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*([,]{1}[\s]*[a-zA-Z0-9\._%-][email protected][a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*)*)$") 
    #if the quantity of emails is zero o its validations is bad return false. 
    if emails.blank? || emails.match(regex).nil? 
      return false 
     else 
      return true 
     end 
end 

: 그래서 방법을 썼다. 그래서이 페이지에 따르면 내 정규 표현식은 괜찮습니다.

하지만 emails.match (regex) .nil을 평가할 때? (문자열이 유효하지만이 문자열이 잘못되었습니다.)

제발 도와주세요. 내 정규식이 좋지 않거나 emails_are_valid가 맞지 않습니까? 메서드가 잘못되었거나 일치 메서드가 잘못되었습니다.

미리 감사드립니다.

+1

읽고하는 것이 좋은 것 (HTTP [하드 이메일 주소의 정규 표현식 인식을?] : // 유래. com/q/156430/128421) 정규식을 사용하여 전자 메일 주소의 유효성을 검사하거나 전자 메일이 실제로 주소로 전달되는지 확인하는 데 정말로 신경 쓰는지 확인하십시오. 차이점은 좋아 보이는 주소가 있거나 잘 아는 주소를 가지고 있다는 것입니다. [Search StackOverflow] (http://stackoverflow.com/search?q=%2Bregex+%2Bemail)와 비슷한 질문이 있습니다. –

+0

@the Tin Man 형식 유효성 검사가 필요하며 쉼표로 구분 된 목록과 쉼표로 구분 된 목록의 형식에 관계없이 메일의 형식을 확인하려고합니다. 그러나 공백 + 가사 + 쉼표 + other_mail을 입력하면 일치 메서드가 올바른 것처럼 반환됩니다. – maxiperez

답변

1

정규식을 선언 할 때 큰 따옴표 대신 작은 따옴표를 사용해야합니다. 그렇지 않으면 \s이 이스케이프 시퀀스로 구문 분석됩니다.

변경

regex = Regexp.new('^(\s*[a-zA-Z0-9\._%-][email protected][a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*([,]{1}[\s]*[a-zA-Z0-9\._%-][email protected][a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*)*)$') 

에 라인과 방법 일 것이다. 보조 노트에

,이 같은 일을하고 좀 더 간결한 방법이 될 것입니다 - http://codepad.org/YbsqIkcP

+0

감사합니다. 문제는 큰 따옴표라고 생각할 수는 없지만 그게 문제였습니다. – maxiperez