2017-03-23 6 views
0

작동하지 않습니다 match``로 전달 (RFC 5322)는,이 성공적으로 이메일 주소와 일치 :이메일 주소 정규 표현식 구글 크롬에서

console.log('[email protected]'.match(/^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)); 

를이하지 않습니다 :

const regex = '^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; 
console.log('[email protected]'.match(regex)); 

유일한 차이점은 후자의 경우 정규식이 변수를 통해 전달되고 슬래시를 사용하지 않는다는 것입니다.

나는 후자의 작업을 얻는 방법을 알고 있습니다.

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp Regex Expression 개체로 전달 하시겠습니까? –

+0

모든 백 슬래시를 이스케이프 처리하여 문자열에서 리터럴로 유지해야합니다. 당신이'\\.'을 쓴 몇 군데에서 바로 얻었지만 당신은 대부분의 다른 곳에서 그것을 놓쳤습니다. 문자열에서 백 슬래시가 먼저 해석하기 때문에 – Barmar

+0

그건 : 당신의 정규 표현식 문자열의 값은 다음과 같습니다 ^ (([^ <>() [] \; :.의 @ "]. + ([^ <> ([[0-9] {1,3}. [0-9] {1,3})()() [] \.,; : s @ "] [0-9] {1,3}. [0-9] {1,3}]) | ((a-zA-Z-0-9) +.) + [a-zA-Z] { 2,})) $ – Tom

답변

0

문자열을 사용할 때 문자열 리터럴을 읽을 때 백 슬래시가 이스케이프 시퀀스로 해석되고 RegExp 생성자로 전달되지 않습니다. 끈을 묶기 위해 그들을 탈출해야합니다.

const regex = '^(([^<>()\\[\\]\\\\.,;:\\[email protected]"]+(\\.[^<>()\[\]\\\\.,;:\\[email protected]"]+)*)|(".+"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$'; 

문자열 리터럴을 사용하여이 작업을 수행하려는 이유가 확실하지 않습니다. 변수에 정규 표현식을 넣으려면 RegExp 리터럴을 계속 사용할 수 있습니다.

const regex = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
+0

대답 해 주셔서 감사합니다. :) 문자열 리터럴 사용에 관한 질문에 대답하려면 정규 표현식 목록이 구성 파일에서 문자열로 오기 때문입니다. :) – bjfletcher

+0

설정 파일에서 나온 경우 이스케이프 처리는 문제가되지 않습니다. 이스케이프는 문자열이 파일에서 읽혀지는 것이 아니라 소스 코드의 리터럴 일 때만 처리됩니다. – Barmar

+0

서버 측 언어로 파일을 읽은 다음이 파일을 사용하여 Javascript 소스 코드를 만드시겠습니까? 이 경우 문자열의 형식을 올바르게 지정하려면 언어의 JSON 함수를 사용해야합니다. – Barmar