2013-05-10 6 views
1

저는 다중 문화 웹 사이트를 운영하고 있습니다. 여기서 사용자는 dd-MMM-yyyy 형식으로 값을 입력 할 수 있습니다. C# (5 월, 영어 = 5 월, 독일어 = Mai)의 문화권에 따라 다른 값을 결정할 수 있습니다.자바 스크립트에서 3 자의 달과 문화가 일치합니다

문제는이 달의 자바 스크립트 유효성 검사입니다. 난 그냥이 정규 표현식 케이스를 구분 만들고 싶어

^Jan$|^Feb$|^Mrz$|^Apr$|^Mai$|^Jun$|^Jul$|^Aug$|^Sep$|^Okt$|^Nov$|^Dez$ 

:

영어 :

^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$ 

독일어 내가 사용할 수있는 값의 목록을 만들 수 있어요. 그러나 내가 본 모든 참조는 모두 나를 가리키는/gi 플래그지만, 모든 예제는 의미가 없습니다. 나는 다음을 시도하고 그냥 작동하지 않습니다

var shouldMatch = "may"; 
var regexPattern = "^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/gi" 
if(shouldMatch.match(regexPattern) != null) { 
    //this should happen 
} 

을 내가 잘못 뭐하는 거지? 자바 스크립트 날을 죽이고 거기에 정규식 도움.

답변

1

jsFiddle Demo

그러나 등 "월"또는 "월"을 일치하려고에 대한 ? 이것은 곧 재미있는 시나리오가됩니다.

var shouldMatch = "may"; 
var regexPattern = /^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/i; 
if(shouldMatch.match(regexPattern) != null) { 
    // this seems happened 
} 
+1

이렇게하면이 문제를 해결할 수 있습니다. btw, jsfiddle 예를 들어 주셔서 감사합니다. 좋은 대답! –

1

당신의 정규 표현식 하지 문자열이어야합니다 대문자로 일치하는 것입니다 표현.

var regexPattern = new RegExp("^JAN$|^FEB$|^MAR$|^APR$|^MAY$|^JUN$|^JUL$|^AUG$|^SEP$|^OCT$|^NOV$|^DEC$", "gi"); 

또한이 대문자로 shouldMatch 변환 당신이 그것을 사용하기 전에 :

shouldMatch = shouldMatch.toUpperCase(); 
+0

+1, 문자열은 RegExp 생성자와 함께 사용할 수 있지만. 그러나 리터럴을 사용하면 올바른 방향으로 가고 있습니다. – RobG

+0

이것은 내가 본 중에있는 uglies 문자열이어야합니다. 이 일을하는 더 우아한 방법이 있습니까? 이와 같은 패턴은 자바 스크립트가 너무 못 생겨 보이게합니다. –

+0

미안하지만, 나는 이것을 부정적인 것으로 생각하고 싶지 않습니다. 그러나 정규 표현식은 코드가 아닌 다른 데이터 값이되었습니다. 그래서 내 위 플립 플롭과 같은 자바 스크립트를 볼 때. 내가보기에 가장 힘든 것은 연산자 또는/gi 연산자가 어떻게 작동하는지 이해하는 것입니다. 명확한 조작 순서가 정의되어 있지 않습니다. –

1

regexPattern 문자열이 아닌 일반입니다 : 내 의견으로는,이 작업을 수행 할 수있는 쉬운 방법은

var shouldMatch = "May"; 
var regexPattern = "^JAN$|^FEB$|^MAR$|^APR$|^MAY$|^JUN$|^JUL$|^AUG$|^SEP$|^OCT$|^NOV$|^DEC$"; 
if(shouldMatch.toUpperCase().match(regexPattern) != null) { 
alert("match"); 
} 
0

이 당신을 위해 작동해야 당신이 경기와 함께 사용하기 전에

는 정규식으로 변환합니다.

test

당신이 RegExp object

에 "^"처음부터 끝까지 "$"

변경된 문자열 regexPattern를 전체 문자열을 테스트로 글로벌 "g"플래그에 대한 필요가 없습니다를 사용하여 변경

대소 문자를 구분하지 않으려면 "i"플래그가 필요합니다.

자바 스크립트

jsfiddle

는 또한 대안으로 jsfiddle

에이

var regexPattern = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)$/i; 

을 수행하여 조금 짧고 좀 덜 추한 만들 수

var shouldMatch = "may"; 
var regexPattern = /^Jan$|^Feb$|^Mar$|^Apr$|^May$|^Jun$|^Jul$|^Aug$|^Sep$|^Oct$|^Nov$|^Dec$/i; 
if(regexPattern.test(shouldMatch)) { 
    alert(shouldMatch); 
} 

에 regex하려면 012도 사용할 수 있습니다.및 Array.some을 입력하고 각 패턴을 테스트중인 문자열에 있는지 확인하십시오. 이 예에서는 구식 브라우저의 경우 최신 브라우저 또는 "shim"/ "polyfill"이 필요합니다. 당신은 당신이에 포함되어 있는지가 아니라 전체 문자열과 일치 할 경우도 jsfiddle

0

에. "==="

자바 스크립트

var shouldMatch = "may"; 
var patterns = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec".split("|"); 
var matched = patterns.some(function (pattern) { 
    if (shouldMatch.toLowerCase().indexOf(pattern.toLowerCase()) !== -1) { 
     alert(shouldMatch); 
     return true; 
    } 

    return false; 
}); 

를 평등을 확인하거나 함께 가능성을 실행할 수 있습니다 -

var Rx=/^(jan|feb|m(ar|rz)|apr|ma[iy]|jun|jul|aug|sep|o[ck]t|nov|de[cz])$/i 

Rx.test('may'); 
+0

독일어와 영어 모두 사용할 수 있지만 웹 사이트에서 지원하는 30 개 이상의 문화가 있습니다. 내 최종 솔루션은 쉽게 월 목록을 구축하고 자바 스크립트에서 전역 변수에 채우는 서버에 정규식을 구축했다. –

관련 문제