2012-08-10 2 views
0
 
function validateDecimal(number,maxDigits) 
{ 
    eval("var stringvar=/^[-+]?([0-9]*\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/"); 

    return stringvar.test(number); 
} 

나는 십진법을 검증하기 위해 위의 함수를 썼다. 'maxDigits'변수는 소수 부분의 자릿수와 유효성을 검사 할 값인 'number'를 지정하는 데 사용됩니다. 하지만 그것은 예 : 24y와 같은 문자가 뒤에 오는 숫자 값으로 시도했을 때 'true'를 반환했습니다. 누군가 내 실수를 알아낼 수있게 도와 줄 수 있습니까?10 진수 유효성 검사를위한 정규식

+1

당신은'여기 eval' 사용하지 마십시오 [정규식] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp) 생성자는 문자열을 인수로 취할 수 있습니다. –

+1

앵커가 잘못 정렬되었으므로 숫자 뒤에 아무 것도 허용하지 않으려면'^ a $ |^b $'또는'^ (a | b) $'가 아닌'^ a | b $ ' 소수점 또는없이 숫자 앞에. – tripleee

답변

3

정규식에 들어 가지 않고도 코드의 문제는 특수 문자를 두 번 이스케이프 처리해야한다는 것입니다. 문자열을 모두 내부에 넣기 때문에 문자열 구문 분석을 통해 단일 백 슬래시가 이스케이프됩니다.

내가이 일을해야한다고 생각 :

eval("var stringvar=/^[-+]?([0-9]*\\.[0-9]{0,"+maxDigits+"})|([0-9]+)$/"); 
+0

네가 맞을 것 같은데. 나는 정확히 Javascript 사람이 아니며, 이것은 내가 처음으로 그런 것을 본 것입니다. 나는 OP의 정규식이 처음부터 나에게 맞았던 것처럼 약간 혼란 스러웠다. 나는 대체 해결책으로 내 대답을 남겨 둘 것이다. 그러나 나에게서 +1. – npinti

+0

고마워, 잘 작동 해. 그러나 나는 문제를 일으키지 않는다. '\'문자를 이스케이프 처리했습니다. ' '\'그 자체를 벗어나는 필요성은 무엇입니까? – shin

+0

좋습니다. 감사합니다. ... – shin

0

방금이 도구를 사용해 본 결과 나에게 적합했습니다. ^[+-]?[0-9]*(\.[0-9]{0,5})?$.

제 경우에는 사소한 수정을 했으므로 10 진수 또는 정수와 일치하는 것으로 보입니다. 필자의 경우 정규 표현식을 수정하여 선택적인 소수 섹션으로 전체 숫자를 취한다. 각각 truefalse : .222, 23.22222 아니지만 4d.22222, 33.333333

var n1 = "4.33254"; 
var n2 = "4d.55"; 

eval("var stringvar=/^[+-]?[0-9]*(\\.[0-9]{0,5})?$/"); 
alert(stringvar.test(n1)); 
alert(stringvar.test(n2)); 

었으며 : 있듯이

정규식과 같은 값과 일치한다.

+0

이 정규 표현식으로 값 2를 시도했지만 결과는 참이었습니다. – shin

+0

4d55는 어떨까요? 문제는 '이스케이프 처리되지 않은'문제라고 생각합니다. ' 아래 내 대답을 참조하십시오. – davidrac

+0

@shinod : 그렇습니다. * davidrac *에 의해 설명되었습니다. 나는 내 대답을 고쳤다. * davidrac *의 제안대로 작동 할 것이다. – npinti

0

이 정규 표현식은 maxDigits of decimals : ^[-+]?[0-9]*.[0-9]{10}$의 유효성을 검사합니다. 소수점 이하 10 자리까지 유효성을 검사합니다.

JavaScript로 구현하면 eval("var stringvar=^[-+]?[0-9]*.[0-9]{" + maxDigits + "}$"); 또는 그와 비슷한 형태가됩니다.

+0

현재 자바 스크립트를 확인할 수 없지만 해당 표현식이 예상되는 소수 자릿수로 작동하는지 확인할 수 있습니다. –

관련 문제