정규식 빈 문자열 또는 이메일


127

SO에서 많은 Regex 이메일 유효성 검사를 찾았지만 빈 문자열을 허용하는 것을 찾지 못했습니다. 이것은 정규식을 통해서만 가능합니까? 빈 문자열 또는 이메일 만 수락 하시겠습니까? 나는 이것을 Regex에서만 가지고 싶다.

답변:


311

이 정규식 패턴은 빈 문자열과 일치합니다.

^$

그리고 이것은 전자 메일이나 빈 문자열과 일치합니다 (조악하게).

(^$|^.*@.*\..*$)

1
^ (|. * ​​@. * \ .. *) $를 수행하는 것은 공백으로 표시하거나 ^와 $를 한 번만 사용하는 것과 같은 효과를 가져야 약간 정리할 수 있습니다.
Runevault

1
이것은 꽤 오래되었지만 방금 넘어져서 대답에 문제가있었습니다. 문자열의 시작 부분이 숨겨져 있지만 여전히 일치하는 경우가 있습니다.이 경우 ^효과적으로 문자열 중간에 전자 메일을 찾거나 아무것도 찾지 않습니다. 이것이 (email_regex)?더 적합합니다.
jclancy

RegEx를 사용하여 시도하기 전에 전자 메일 유효성 검사가 얼마나 복잡한 지 읽어보십시오. stackoverflow.com/questions/201323/…
bryan kennedy

다음 이메일 test.test@test와 일치합니다. 이것은 ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ s @] + $라고 생각하는 것이
좋습니다.

특정 Java 응용 프로그램에서는 ^$작동하지 않지만 다음과 같이 작동합니다 ^(?!.). [ ^문자열 시작, (?!)부정적 예측, .모든 문자-줄 바꿈 제외]
LightCC

8

일치하는 빈 문자열 또는 이메일

(^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

빈 문자열 또는 이메일과 일치하지만 공백의 양과 일치

(^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

정규식 자체와 일치하는 이메일에 대해 자세히 알아보십시오.

http://www.regular-expressions.info/email.html


2

위의 답변은 작동하지만 ($는 비어 있음) 방금 시도한 결과 그대로 비어 있습니다.

/\A(INTENSE_EMAIL_REGEX|)\z/i

역순으로 같은 것

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

정규식 이메일과 일치하지 않습니다. 그것은 매우 추하고 길고 복잡 하며 정규식 파서는 어쨌든 처리 할 수 ​​없습니다. 일치하는 라이브러리 루틴을 찾으십시오. 이메일 주소를 일치시키는 실제 문제 만 해결하려면 (즉, 일반적으로 작동하는 잘못된 코드를 원할 경우) 다른 사람이 제출 한 regular-expressions.info 링크를 사용하십시오.

빈 줄 ^$은 여러 사람들이 언급하고 잘 작동합니다.


13
추악한 정규 표현식은 실제로 정규 표현식 파서에 의해 처리 될 수 있습니다. 추악하기 때문에 정규 표현식을 사용하지 않는 것은 어리 석습니다.
Peter

이것은 건설적이지 않습니다. RegEx는 시도되고 테스트되었습니다 (그리고 추악하지는 않습니다. 작동 방식이 매우 우아하다고 말 하시겠습니까?). 가능한 해결책에 대한 지침없이 라이브러리를 모호하게 제안하는 것은 응답의 목적을 전혀 상실합니다. 모두가 북마크해야합니다 : code.tutsplus.com/tutorials/…
pimbrouwers

정규식은 읽기, 유지 관리 및 디버그하기가 어렵 기 때문에 라이브러리 호출로 대체 할 수있는 주요 후보입니다.
einnocent

2
기록을 위해 : 나는 어떤 언어 OP가 사용하고 있는지 알고 있다면 기꺼이 특정 라이브러리를 추천 할 것 입니다. 이것은 언어에 구애받지 않는 질문이므로 제 선택은 다소 제한적입니다.
Kevin

2
정규식 예쁘지 않아야 합니다. 그 논리에 의해 아무도 정규식을 사용해서는 안됩니다. 라이브러리를 교체하는 것에 대해 너무 단호하다면 라이브러리가 어떻게 할 것이라고 생각하십니까? 그것은 매우 길고 복잡한 코드를 가지거나 정규 표현식을 사용할 것입니다 ... 그 시점에서 당신은 단지 자신의 "라이브러리"를 구현할 수도 있습니다. 그리고 요즘 누군가가 정규식을 어떻게 사용하는지 모른다면 아마 어쨌든 이메일 주소를 확인하는 일을해서는 안됩니다.
Andrew

0

이 문제가 해결되면 빈 문자열이나 정확한 전자 메일 ID를 수락합니다.

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

2
좀 더 설명해 주시겠습니까?
Vinay Prajapati

0

나는 /^\s+$|^$/gi빈 공간과 빈 공간을 일치시키는 것을 선호 합니다.

console.log("  ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));


3
^ \ s * $를 사용하면 또는 필요하지 않습니다. 또한 g 또는 i 수정자가 필요하지 않습니다. 이는 전체 행과 일치하고 대 / 소문자가 포함되지 않기 때문입니다.
Cadoo

0

레일 내에서 사용하는 경우-활성 레코드 유효성 검사 allow_blank: true

같이:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.