2012-09-26 2 views
2

나는 처음에 더하기/빼기 기호 다음에 텍스트 필드 입력란에 하나의 점 만 허용하는 10 진수 숫자가 필요하다는 요구 사항이 있습니다. .RegEx는 자바 스크립트에서 텍스트 필드에 음수 십진수 입력 허용

텍스트 필드에는 일반 정수와 십진수 및 음수와 음수의 10 진수를 사용할 수 있어야합니다. 플러스 및 마이너스 기호는 처음 (첫 번째 문자)에만 허용되어야하며 선택 사항입니다. 또한 소수점 이하 자리수를 허용해야합니다 (예 : -12.12345 등). 단 하나의 소수점 (점) 만 입력하십시오. 허용

숫자는 1, + 1, -1, 0.1, 1.1, -1.1, -.12, +.12, 123.4456, -123.345, 123.345은

어떤 도움이 높게 평가되고 등등 .

위의 요구 사항에 대해서는 아래 정규식을 사용하고 있습니다.

var integerOnly = /[\+\-0-9\.]/g; 

이하의 스크립트 (약간 수정 한 다른 스레드에서 가져온 것)를 확인하십시오.

function restrictInput(myfield, e, restrictionType, checkdot){ 
    if (!e) var e = window.event 
    if (e.keyCode) code = e.keyCode; 
    else if (e.which) code = e.which; 
    var character = String.fromCharCode(code); 
    alert("1 " + character); 
    // if user pressed esc... remove focus from field... 
    if (code==27) { this.blur(); return false; } 
    //alert("2"); 
    // ignore if the user presses other keys 
    // strange because code: 39 is the down key AND ' key... 
    // and DEL also equals . 
    if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) { 
     alert("3"); 
     if (character.match(restrictionType)) { 
      alert("4"); 
      if(checkdot == "checkdot" & '-' != character & '+' != character){ 
       alert("5"); 
       return !isNaN((myfield.value.toString()==''? '0':myfield.value.toString())+character); 
      } else { 
       return true; 
      } 
     } else { 
      return false; 
     } 
    } 
} 

다음은 스크립트 호출 방법입니다.

<input type="text" id="db" width="3" value="" onkeypress="return restrictInput(this, event, integerOnly, 'checkdot');"/> 

그것은 같은 몇 가지 경우를 제외하고 잘 작동 :

  1. 이 허용 +/- 시대의 어떤 장소 어떤 수. 내 요구 사항은 처음에만 허용하는 것입니다.

아래와 같이 정규식을 수정하려고했습니다.

var integerOnly = /[\+\-]?[0-9\.]/g; 

이 경우 표현식과 일치하지 않습니다. 경고 4에 도달하지 않습니다.

한 가지 점은 소수점 이하 하나만 허용한다는 것입니다.

정규식을 수정하여 처음부터 +/- 만 허용하도록 도와 줄 수 있습니까?

감사합니다.

+0

RegEx를 쉽게 사용하고 결과를 즉시 확인하려면 http://regexpal.com/ –

답변

1

난 당신이 뭔가 싶은 생각 : (예 : 1. 또는 .1)하지만 noth 모두 선택 사항입니다 후 소수 구분하기 전에 숫자 또는 숫자로

^[-+]?(\d+\.?|\d*\.\d+)$ 

를 별도로 사건을 처리해야 .

4

대신 정규식과 재생의

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 
0
var test_ary = ['1', '+1', '-1', '.1', '+1.1', '-1.1', '-.12', '+.12', '123.4456', '-123.345', '+123.345']; 

var reg = /^[\+\-]?(?:\.?\d+|\d+\.?\d+)$/; 

var i; 


for (i = 0; i < test_ary.length; i = i + 1) { 
    console.log(reg.test(test_ary[i])); 
} 

당신이 시도 할 수 있습니다를 다음과 같이 테스트 케이스로, isNumber 기능을 사용하여 텍스트를 검증 :)

+0

위를 시도했지만 작동하지 않는 것 같습니다. 원래 게시물을 편집했는데 문제가 있는지 알려주시겠습니까? –

+0

솔직히 내 대답에는 몇 가지 문제점이 있지만 @niksvp의 답은 가장 좋은 방법으로 요청을 완료합니다.이 경우 RegExp를 사용하지 말고 답변을 따라야합니다. –

+0

@LaxmiRaghu 및 코드에서 버그를 수정했습니다. 조피. –

0

내가 'niksvp'스크립트를 가져다가 내 요구 사항을 충족하기 위해 조금 수정.

아래 스크립트는 모든 유형의 +/- 십진수에서 사용할 수 있습니다. 예 : 1.1, 1.1, -1.1, 0.1, -.1, +.1, 1, -1, +1, 123.345, 123.345, 당신의 도움에 대한 모든 -123.345 등

function isNumber(myfield, e) { 
if (!e) var e = window.event 
    if (e.keyCode) code = e.keyCode; 
    else if (e.which) code = e.which; 
    var character = String.fromCharCode(code); 

    var n = myfield.value.toString()==''? '0':myfield.value.toString(); 
    // this is required to allow numbers of this format 
    // -1.1, + 1.1, .1, -.1, +.1 etc 
    if(n == '-' | n == '+' | n== '.') { 
     n +=0; 
    } 

    if(n.length > 1) { 
     n = n.toString() + character; 
    } 

    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

감사합니다 .

+0

스크립트를 다음과 같이 사용해야합니다.

+0

이 스크립트가 어떻게 유효성을 확인하는지 또는 어떤 목적으로 귀하에게 도움이되는지 이해하지 못합니까? – niksvp

+0

또한 +/- 기호는 처음과 소수점 한 개만 허용합니다. –

관련 문제