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

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

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

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

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

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



답변

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

^$|pattern

설명

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

참고 문헌


의 위에 \b

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

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

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

참고 문헌


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

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

관련 질문


답변

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

예를 들면 :

/(?: some regexp )?/

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

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

없음 |“또는”연산자 필요!

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


답변

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

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

의미

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

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


답변

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


답변