정규 표현식을 사용하는 JavaScript 코드를 생성 할 때 문자열 변수에서 정규 표현식 패턴을 삽입 할 때 문제가 발생합니다. 콘텐츠는 리소스 파일에서 읽습니다.리소스에서 정규 표현식 패턴을 문자열에 삽입하는 방법. 형식?
string.Format
을 사용하여 템플릿 문자열에 삽입 할 때 백 슬래시 해석에 문제가있는 것으로 보입니다. 자바 스크립트는 괜찮은 것 같습니다. 그러나 정규식이 올바른 텍스트와 일치하지 않습니다.
정규 표현식 패턴은 회사 전자 메일의 모양을 정의하며 리소스 파일 (먼저 문자열 변수로 읽음)에 정의됩니다. 모양은 다음과 같습니다 : "\\w+\\.\\[email protected]"
. 사용자가 [email protected]
과 같은 전자 메일과 일치해야합니다. 일치하지 않으면 JavaScript 코드에서 추가 확인을 요청합니다.
동일한 자바 스크립트 (아래 표시된 것처럼)는 하드 와이어 된 경우 정상적으로 작동했습니다. 이 문제는 JavaScript 코드의 동적 정의와 관련이 있습니다.
컨텍스트 : asp.net 단추에 even 처리기가 있으면 클라이언트 쪽 코드를 추가하려고합니다. 코드가 더 많은 회사에서 재사용되어야하기 때문에 패턴이 자원에 있습니다. 국제화 때문에 확인 텍스트가 자원에 있습니다.
protected void btnSave_Init(object sender, EventArgs e)
{
ASPxButton btn = sender as ASPxButton;
string regex = GetLocalResourceObject("btnSave.RegEx").ToString();
string txt = GetLocalResourceObject("btnSave.ConfirmText").ToString();
txt = txt.Replace("\r\n", "\\n"); // must be a single line for JavaScript
string fo = @"
function(s, e) {{
var rex = new RegExp('{0}', 'i');
if (!rex.test(email.GetText()))
e.processOnServer = confirm('{1}');
}}";
btn.ClientSideEvents.Click = String.Format(fo, regex, txt);
}
업데이트 : 리소스 파일에 기록 된 문자열 \w+\.\[email protected]\.com
처럼 보이는 (단일 백 슬래시, 마지막 점의 탈출 고정). 문자열 변수를 읽을 때 백 슬래시는 일반 문자로 처리됩니다. 양식에서 얻은 텍스트는 [email protected]
입니다. 정규 표현식 개체를 만드는 줄이 제안 된대로 var rex = /^(?:{0})$/i;
으로 변경되었습니다. 표시되지 않은 또 다른 사소한 버그가있었습니다.
리소스 파일에서 정규식을 검색하면 어떻게됩니까? – DigiFriend
테스트를 위해'regex'와'txt'의 값을 공유하십시오. –
JS의'RegExp # test'는 부분 일치를 찾을 것이므로''\\ w + \\. \\ [email protected] ''도'@ # % [email protected]와 같은 문자열과 일치합니다! '. 또한 'com.'이전의'.'은 임의의 문자와 일치하므로 일치 할 것입니다. 'e.f @ company§com'. –