2012-03-05 3 views
1

나는 다음과 같은 기능을 가지고 :자바 스크립트 정규식 오류

function checkRegexp(o, regexp, n) { 

      if (!(regexp.test(o.val()))) {     
       return false; 
      } else { 
       return true; 
      } 
     } 

이 코드는 제대로 이메일 주소를 확인합니다 :

checkRegexp(numberId, "^[0-9]", "enter only number"); 

하지만이이 번호를 확인하도록되어

checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "incorrect email "); 

이 오류가 발생합니다 : regexp.test is not a function

+1

질문은 무엇인가하는 RegExp 개체가 다음과 같이 .test 기능

변경을 호출 할 수있다? –

+0

정규 표현식이 문자열이 아닙니다 –

답변

5

당신은 문자열을 전달하고, 아닌 정규식, 그것은 /없이

checkRegexp(numberID, /^[0-9]/, "enter only number"); 

해야한다, JS는 당신이이되고 싶어요 알 수있는 방법이 없습니다 정규식.

+0

도와 주셔서 감사합니다 –

1

슬래시 (/^[0-9]/)로 구분 된 일부는 RegExp 개체입니다. "^[0-9]"은 문자열 일 뿐이므로 .test()을 호출 할 수 없습니다.

대신보십시오 : 당신이 numberId는 숫자가 포함되어 있는지 확인하려면

또한 checkRegexp(numberId, /^[0-9]/, "enter only numbers");

이, 당신이 실제로 원하는 :

checkRegexp(numberId, /^[0-9]+$/, "enter only numbers");

기본적으로이 있는지 확인 하나 이상의 숫자 만 [0-9]+, 시작과 ^ 사이의 값이며 끝 $.

2

정규 표현식 대신 문자열로 전달합니다.

시도 :

checkRegexp(numberId, /^[0-9]/, "eneter only number"); 
+0

도움을 주신 덕분에 –

2

첫째, 당신이 아니라 정규 표현식 문자열을 전달 :

"^[0-9]" // string 
/^[0-9]/ // regexp 

둘째, 당신은 예를 들어, 이후 ^[0-9]+$을 의미하는 것 같아요 "1a"은 현재 전달되며 이는 숫자가 아닙니다.

+1

'/^[0-9] * $ /'에 +1하지만'/^[0-9] + $ /'에 대해서도 +1 할 수 있습니다. 선택권. 첫 번째는 빈 문자열을 허용하고 후자는 허용하지 않습니다. – Arjan

0

Regexp 대신 문자열을 입력하십시오. 이 작동합니다 :

checkRegexp(numberId, /^[0-9]/, "eneter only number"); 
0

당신은 마지막 문장에 따옴표를 사용하고 있습니다.

이 시도 :

checkRegexp(numberId, /^[0-9]/, "eneter only number"); 
2

정규식이 가장 느린 종류Cached regex are actually faster than this solution가 있습니다. 그러나 나는 그것을 참조 용으로 남겨두고있다 :-).이 숫자 인 경우 테스트하려면이 기능을 사용할 수 있습니다

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

출처 : https://stackoverflow.com/a/1830844/851498

P.S : 코드가 잘못된 왜 다른 답변은 당신에게 더 나은 솔루션을 표시하는 것을 선호, 당신을 말할 것이다.

+0

이 작업을 많이하지 않으면 성능 차이가 미미합니다. 폼 검증을 위해 그가 몇 번하고있는 것처럼 보입니다. 그러나 내장 함수를 사용하는 것이 더 좋은 방법이라는 데 동의합니다. –

+0

캐시 된 regex 리터럴은 'parseFloat'을 생략하더라도 더 빠릅니다 (chrome 17). http://jsperf.com/numeric-checks –

+0

정규식이 JS에서 가장 느린 것 같아서 놀랍습니다. 좋은 점은 더 나쁠 수 있다는 것입니다. –

0

/ /가 없거나 new RegExp("^[0-9]")입니다. 그것은

checkRegexp(numberId, /^[0-9]/, "eneter only number");