2015-01-21 4 views
1

유효한 이메일 또는 빈 이메일 만 허용하는 양식을 만들려고합니다.어떻게하면 정규식을 비워 둘 수 있습니까?

EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i OR "" 
validates :email, format: { with: EMAIL_REGEX } 

아니면

EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
BLANK_REGEX = 
validates :email, format: { with: EMAIL_REGEX OR BLANK_REGEX } 

는하지만 올바른 구문을 알아낼 수 없습니다 : 나는이 라인을 따라 뭔가있을 것이라 생각합니다. 누구든지이 일을 할 올바른 방법을 알고 있습니까?

+0

@sawa 저는 잘 모릅니다. 감사합니다. –

답변

1

@ avinash-raj가 지적한 접근 방식은 완벽합니다. 그러나 allow_blank : true을 사용할 수 있습니다. 귀하의 코드는 다음과 같아야합니다.

validates :email, format: { with: /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i}, allow_blank: true 
1

정규식을 빈 전자 메일과 일치 시키려면 옵션을 선택하십시오.

EMAIL_REGEX = /\A(?:[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+)?\z/i 

또는

EMAIL_REGEX = /^(?:[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+)?$/i 

는 정규식 선택하게 비 캡처 그룹 (?:...) 내부 전체 정규 표현식을 넣고 그 그룹에 ? 다음에 추가 할 수 있습니다.

+0

조금 확장 할 수 있습니까? 어떻게하면 정규 표현식을 선택적으로 만들 수 있습니까? –

+0

당신은'^ (? : [\ w + \ -.] + @ [a-z \ d \ -.] + \. [a-z] + |) $'처럼 할 수 있습니다. '|'또는 연산자는 빈 줄을 일치시키는 데 도움이됩니다. –

관련 문제