패턴과 일치하거나 빈 문자열 인 정규식


84

이메일 주소 형식과 일치하는 다음 정규식이 있습니다.

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

JavaScript를 사용하는 양식의 유효성 검사에 사용됩니다. 그러나 이것은 선택적 필드입니다. 따라서 이메일 주소 형식 또는 빈 문자열과 일치하도록이 정규식을 어떻게 변경할 수 있습니까?

제한된 정규식 지식으로 볼 \b때 빈 문자열과 일치하고 |"Or"를 의미 한다고 생각 하므로 다음을 시도했지만 작동하지 않았습니다.

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b

5
이메일의 유효성을 검사 해야하는 경우 가능한 한 관대해야합니다. 집에서 만든 정규식으로 실제 유효하고 기능적인 이메일 주소를 놓치는 것이 얼마나 쉬운 지 놀랄 것입니다. 예를 들어 정규식은 joe_blow@foo.com, micro$oft@apple.com, root @ localhost, siegfried+roy@lasvegas.com과 같은 유효한 주소에서 실패합니다.
자노

자노에 동의하는 것은, 바로이 정규식에 대해 살펴 걸릴 ex-parrot.com/pdw/Mail-RFC822-Address.html
앤더스

@Anders 와우, 그것은 매우 복잡한 정규식입니다! 정규식의 복잡성을 오해 한 것 같습니다
Curt

4
아니, 난 당신이 :-) 이메일 유효성 검사의 복잡성을 misunderestimated 것 같아요
자노

답변:


199

일치 pattern하거나 빈 문자열을 사용하려면

^$|pattern

설명

  • ^그리고 $각각 문자열 앵커의 시작과 끝입니다.
  • |대체를 나타내는 데 사용됩니다 (예 :) this|that.

참고 문헌


의 위에 \b

\b대부분의 특징은 "단어 경계"앵커입니다. 너비가 0 인 일치, 즉 빈 문자열이지만 특정 위치 , 즉 단어의 경계 에서만 해당 문자열과 일치합니다 .

즉, 다음 \b위치에 있습니다.

  • 연속 \w\W(두 순서 중 하나) :
    • 즉, 단어 문자와 단어가 아닌 문자 사이
  • 사이 ^\w
    • 즉, 다음으로 시작하는 경우 문자열의 시작 부분에 \w
  • 사이 \w$
    • 즉, 문자열의 끝에 \w

참고 문헌


정규식을 사용하여 전자 메일 주소 일치

이것은 사양에 따라 사소한 것이 아닙니다.

관련 질문


10

대안은 정규 표현식을 캡처하지 않는 괄호 안에 넣는 것입니다. 그런 다음 ?한정자를 사용하여 해당 표현식을 선택적으로 만듭니다. 그러면 캡처되지 않은 그룹의 0 (즉, 빈 문자열) 또는 1 개의 인스턴스를 찾습니다.

예를 들면 :

/(?: some regexp )?/

귀하의 경우 정규 표현식은 다음과 같습니다.

/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/

없음 |"또는"연산자 필요!

다음 은 JavaScript 정규식 구문에 대한 Mozilla 문서입니다.


8

선택적 이메일 주소를 확인하려는 이유를 잘 모르겠지만 다음을 사용하는 것이 좋습니다.

^$|^[^@\s]+@[^@\s]+$

의미

^$        empty string
|         or
^         beginning of string
[^@\s]+   any character but @ or whitespace
@         
[^@\s]+
$         end of string

어쨌든 가짜 이메일을 중지하지 않으며 이렇게하면 유효한 주소가 중지되지 않습니다.


필드에 주소를 입력하지 않으면 데이터베이스에 NULL 값이 입력되므로 뉴스 레터 등을 발송할 때 처리 할 수 ​​있습니다. 이것이 가짜 주소를 멈추지 않을 것이라는 점에 감사드립니다. 정규식 전혀 그게 가능한을 생각하지만, 적어도 인간의 오류 최소화 할 수 있습니다
커트

1
나는 또한 고객이 이것을 자주 요청합니다. 고객이 이메일 필드에 전화 번호를 입력하는 것과 같은 어리석은 행동을하지 못하도록하는 것입니다.
Kelly Gendron 2012 년

빈 문자열을 확인하고 싶었습니다. ^ $는 일
Subhashi

1

\ b는 단어 경계와 일치합니다. 빈 문자열에 ^ $를 사용할 수 있다고 생각합니다.

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