jQuery : 텍스트 상자의 "숫자"전용 입력을 제한하는 가장 좋은 방법은 무엇입니까? (소수점 허용)


228

텍스트 상자의 "숫자"전용 입력을 제한하는 가장 좋은 방법은 무엇입니까?

소수점을 허용하는 것을 찾고 있습니다.

많은 예를 봅니다. 그러나 어느 것을 사용할 것인지 아직 결정하지 않았습니다.

Praveen Jeganathan에서 업데이트

더 이상 플러그인이 아니라 jQuery는 jQuery.isNumeric()v1.7에서 자체적으로 추가했습니다. 참조 : https://stackoverflow.com/a/20186188/66767


3
이것은 의견 기반 질문이지만 매우 유용합니다. 의견 기반 질문이 허용되어야합니다. 이 정보를 찾는 사람은 이것이 단지 의견에 근거한 답변이라는 사실 만 알고 있으면됩니다. 태그이면 충분합니다.
Thiago C. S Ventura

여기에 라이브 데모와 함께 좋은 기사입니다 codepedia.info/...은
Satinder 싱

답변:


198

최신 정보

이에 대한 새롭고 매우 간단한 해결책이 있습니다.

다양한 숫자 필터를 포함 하여 텍스트에 모든 종류의 입력 필터 를 사용할 수 있습니다 <input>. 이것은 복사 + 붙여 넣기, 드래그 + 드롭, 키보드 단축키, 상황에 맞는 메뉴 작업, 입력 할 수없는 키 및 모든 키보드 레이아웃을 올바르게 처리합니다.

참조 이 대답을 하거나 스스로를 시도 JSFiddle에 .

jquery.numeric 플러그인

jquery.numeric 플러그인 으로 많은 양식을 성공적으로 구현했습니다 .

$(document).ready(function(){
    $(".numeric").numeric();
});

또한 이것은 텍스트 영역에서도 작동합니다!

그러나 Ctrl + A, 상황에 맞는 메뉴를 통한 복사 + 붙여 넣기 및 드래그 + 드롭은 예상대로 작동 하지 않습니다 .

HTML 5

HTML 5 표준에 대한 광범위한 지원으로 요소의 pattern속성과 number유형을 사용 input하여 숫자 만 입력을 제한 할 수 있습니다. 일부 브라우저 (특히 Chrome)에서는 숫자가 아닌 내용의 붙여 넣기도 제한합니다. 더 자세한 정보 number및 기타 최신 입력 유형은 여기를 참조하십시오 .


5
이 플러그인은 Opera에서 백 스페이스를 사용할 수 없습니다.
Darryl Hein

6
@Darryl 소스는 수십 줄에 불과하므로 수정이 쉽지 않습니다. 방금이 플러그인을 발견하고 수정 allowDecimal하여 정수 값만 허용하려고 할 때마다 옵션이 있습니다. 소스는 매우 간단하고 잘 작성되었습니다.
Earlz 2016 년

1
의 입력 필드에 복사하여 붙여 넣을 때는 작동하지 않습니다 type="number".
Tallmaris

@Tallmaris 이것은 실제로 매우 오래된 질문과 답변입니다. HTML에 많은 변화가 있었으므로 고려해야합니다.
TheVillageIdiot

안녕하세요 @TheVillageIdiot, 당신이 맞아요. 나는 의견에 무례하게 말하고 싶지 않았습니다 (아마 약간 건조합니다) :) 사실은 최근에 의견을 보았 기 때문에 현재로서는 아마도 이것이 최선의 해결책이 아니라는 것을 분명히하고 싶었습니다. 문제.
Tallmaris

288

유효성 검사가 아닌 입력을 제한하려는 경우 주요 이벤트로 작업 할 수 있습니다. 이 같은:

<input type="text" class="numbersOnly" value="" />

과:

jQuery('.numbersOnly').keyup(function () { 
    this.value = this.value.replace(/[^0-9\.]/g,'');
});

이를 통해 사용자는 유효성 검사 단계에서 나중에 알파벳 문자 등을 입력 할 수 없음을 즉시 알 수 있습니다.

마우스로 잘라서 붙여 넣거나 키 이벤트를 트리거하지 않는 양식 자동 완성 기능을 사용하여 입력 내용을 채울 수 있기 때문에 여전히 유효성 검사를 원할 것입니다.


4
+1-나는이 같은 것을 제안하려고했다. 이 형식의 유효성 검사는 키 스트로크 당 한 번이 아니라 한 번만 수행 될 수 있습니다. 내가 추가하는 유일한 것은 사용자가 입력하는 내용이 거부되고 있다는 일종의 경고입니다. 글자를 표시하지 않으면 너무 많은 사람들이 키보드가 고장 났다고 생각하게됩니다. 앱이 실제로 무언가를하고 있다는 것을 사용자가 알고있는 한 배경 또는 테두리 색상을 미묘하게 변경할 수 있습니다.
nickf

동의했다. tarbuilders.com예가 있습니다. "연락처"를 클릭하면 양식에서 사용자 입력을 즉시 확인하고 유효한 경우 녹색 테두리와 확인 표시가 있습니다. 무효-> 빨강 및 "x"
Keith Bentrup

5
화살표 키 문제를 해결하려면 이 답변 을 참조하십시오 .
Hanna

마우스 오른쪽 버튼을 클릭 한 후 붙여 넣기를 클릭하여 문자와 문자를 붙여 넣을 수 있습니다. 이 문제를 해결하는 쉬운 방법은 다음과 같습니다.$doc.on('keyup blur input propertychange', 'input[name="price"]', function(){$(this).val($(this).val().replace(/[^0-9\.]/g,''));});
Rens Tillmann

1
CRAP, 숫자 "123"을 쓴 다음 문자 키, 즉 "a"를 누르면 입력이 비게됩니다.
candlejack

102

가장 좋은 대답은 위의 방법이라고 생각했습니다.

jQuery('.numbersOnly').keyup(function () {  
    this.value = this.value.replace(/[^0-9\.]/g,''); 
});

그러나 화살표 키와 삭제 버튼이 커서를 문자열의 끝 부분에 맞추는 것이 약간 고통 스럽다는 것에 동의합니다 (테스트 때문에 나에게 쫓겨났습니다)

나는 간단한 변화를 추가했다

$('.numbersOnly').keyup(function () {
    if (this.value != this.value.replace(/[^0-9\.]/g, '')) {
       this.value = this.value.replace(/[^0-9\.]/g, '');
    }
});

이렇게하면 텍스트가 변경되지 않는 버튼 히트가있는 경우 무시하십시오. 이것으로 당신은 끝까지 점프하지 않고 화살표를 누르고 삭제할 수 있지만 숫자가 아닌 텍스트는 지 웁니다.


27
더 나은 성능을 위해 두 번 실행하는 대신 바꾸기 결과로 var을 작성하십시오.
DriverDan

4
keypress분명히 있기 때문에 더욱,이를 단순화하는 데 사용할 수 있습니다 keyupkeydown트리거 모든 키보드 키 반면, keypress (따라서 "문자"키에 대한 트리거 하지 화살표 및 삭제 키 트리거). 이 답변 참조 : stackoverflow.com/a/1367720/1298685
Ian Campbell

하나 이상의 소수점을 허용합니다. 소수점 하나만 허용하는 방법 금액 텍스트 필드를 신청했습니다. 12.5.6도 복용 중입니다. 한 포인트를 제한하는 방법.
niru dyogi

@IanCampbell 키 누름은 제거되지 않는 문자를 입력 할 수 있음을 의미합니다. 작동하지 않습니다. 키 다운도 마찬가지입니다. 키업에서만 작동하도록 할 수 있습니다.
nickdnk

54

jquery.numeric 플러그인에는 저자에게 알려주는 몇 가지 버그가 있습니다. Safari와 Opera에서 소수점을 여러 개 사용할 수 있으며 Opera에서 백 스페이스, 화살표 키 또는 기타 여러 제어 문자를 입력 할 수 없습니다. 양의 정수 입력이 필요했기 때문에 결국 내 자신을 작성했습니다.

$(".numeric").keypress(function(event) {
  // Backspace, tab, enter, end, home, left, right
  // We don't support the del key in Opera because del == . == 46.
  var controlKeys = [8, 9, 13, 35, 36, 37, 39];
  // IE doesn't support indexOf
  var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
  // Some browsers just don't raise events for control keys. Easy.
  // e.g. Safari backspace.
  if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
      (49 <= event.which && event.which <= 57) || // Always 1 through 9
      (48 == event.which && $(this).attr("value")) || // No 0 first digit
      isControlKey) { // Opera assigns values for control keys.
    return;
  } else {
    event.preventDefault();
  }
});

이 코드를 사용하여 0을 입력 할 수 없습니다. Mac에서 Chrome 및 FF로 테스트되었습니다.
jaredstenquist

1
0 자리 (48 == event.which && ($ (this) .val ()> 0))을 수락하기 위해 이것을 업데이트했습니다. || // No 0 첫 번째 자리
aljordan82

이것은 훌륭한 솔루션이지만 소수점 이하 자릿수가 없습니다. (46 == event.which &&! ($ (this) .val (). includes ( "."))) ||
DiamondDrake

전혀 0을 입력 할 수 없습니다.
PJ7

47

더 이상 플러그인 이 아닌 jQuery 는 v1.7에 추가 된 자체 jQuery.isNumeric ()을 구현했습니다 .

jQuery.isNumeric( value )

인수가 숫자인지 확인합니다.

샘플 결과

$.isNumeric( "-10" );     // true
$.isNumeric( 16 );        // true
$.isNumeric( 0xFF );      // true
$.isNumeric( "0xFF" );    // true
$.isNumeric( "8e5" );     // true (exponential notation string)
$.isNumeric( 3.1415 );    // true
$.isNumeric( +10 );       // true
$.isNumeric( 0144 );      // true (octal integer literal)
$.isNumeric( "" );        // false
$.isNumeric({});          // false (empty object)
$.isNumeric( NaN );       // false
$.isNumeric( null );      // false
$.isNumeric( true );      // false
$.isNumeric( Infinity );  // false
$.isNumeric( undefined ); // false

다음은 isNumeric ()을 이벤트 리스너와 묶는 방법의 예입니다.

$(document).on('keyup', '.numeric-only', function(event) {
   var v = this.value;
   if($.isNumeric(v) === false) {
        //chop off the last char entered
        this.value = this.value.slice(0,-1);
   }
});

플러그인이없는 경우 +1 수천 명의 구분자를 허용하기 위해 약간의 변경을 추가하고 싶습니다. 대신로 var v = this.value;변경하십시오 var v = this.value.replace(/,/g,'');. 과 같은 숫자 21,345,67.800도 고려됩니다.
maan81

아무도 이것이 숫자를 확인하는 방법을 알고 있습니까? 키 코드 또는 정규식을 사용합니까? 다른 키보드 레이아웃을 고려할 경우 중요합니다.
Christopher Grigg

2
이것은 매우 가깝습니다. 그러나 문자 키를 누르고 있으면 검사가 제대로 실행되지 않습니다. 캐릭터가 "실행"됩니다. 대신이 시도 : $(document).on('keyup keypress', '#somethingSomething', function(){ var aValue = $(this).val(); if($.isNumeric(aValue) === false){ $(this).val(aValue.slice(0,-1)); } });
Gwi7d31

34

위에서 언급 한 numeric () 플러그인은 Opera에서 작동하지 않습니다 (백 스페이스 키, 백 스페이스 키 또는 포워드 키를 사용할 수 없음).

JQuery 또는 Javascript에서 아래 코드는 완벽하게 작동합니다 (두 줄에 불과합니다).

jQuery :

$(document).ready(function() {
    $('.key-numeric').keypress(function(e) {
            var verified = (e.which == 8 || e.which == undefined || e.which == 0) ? null : String.fromCharCode(e.which).match(/[^0-9]/);
            if (verified) {e.preventDefault();}
    });
});

자바 스크립트 :

function isNumeric(e)
{
    var keynum = (!window.event) ? e.which : e.keyCode;
    return !((keynum == 8 || keynum == undefined || e.which == 0) ? null : String.fromCharCode(keynum).match(/[^0-9]/));
}

물론 이것은 순수한 숫자 입력 (더하기 백 스페이스, 삭제, 앞으로 / 뒤로 키) 전용이지만 포인트와 빼기 문자를 포함하도록 쉽게 변경할 수 있습니다.


숫자 키패드도 허용되지 않습니다
Graham


18

숫자 입력 제한을위한 긴 코드가 필요하지 않습니다.이 코드를 사용해보십시오.

또한 유효한 int & float 값을 받아들입니다.

자바 스크립트 접근

onload =function(){ 
  var ele = document.querySelectorAll('.number-only')[0];
  ele.onkeypress = function(e) {
     if(isNaN(this.value+""+String.fromCharCode(e.charCode)))
        return false;
  }
  ele.onpaste = function(e){
     e.preventDefault();
  }
}
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />

jQuery 접근

$(function(){

  $('.number-only').keypress(function(e) {
	if(isNaN(this.value+""+String.fromCharCode(e.charCode))) return false;
  })
  .on("cut copy paste",function(e){
	e.preventDefault();
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />

최신 정보

위의 답변은 가장 일반적인 사용 사례에 대한 것입니다-숫자로 입력을 확인하십시오.

아래는 특별한 사용 사례를위한 코드 스 니펫입니다.

  • 음수 허용
  • 제거하기 전에 잘못된 키 입력을 표시합니다.

$(function(){
      
  $('.number-only').keyup(function(e) {
        if(this.value!='-')
          while(isNaN(this.value))
            this.value = this.value.split('').reverse().join('').replace(/[\D]/i,'')
                                   .split('').reverse().join('');
    })
    .on("cut copy paste",function(e){
    	e.preventDefault();
    });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p> Input box that accepts only valid int and float values.</p>
<input class="number-only" type=text />


14

아래는 문자 그대로 키 입력을 차단하는 데 사용하는 것입니다. 숫자 0-9와 소수점 만 허용합니다. 많은 코드가 아니라 구현하기 쉽고 매력처럼 작동합니다.

<script>
function isNumberKey(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    } else {
        return true;
    }      
}
</script>

<input value="" onkeypress="return isNumberKey(event)">

궁금한 사람이 charCode != 46있다면 if 문에서 제거하여 소수를 제한 할 수 있습니다 . 좋은 대답입니다!
Gaʀʀʏ

정확히, 나는 charCode! = 46을 제거하여 소수를 건너 뜁니다. 고마워 kaleazy,이 답변은 나에게 큰 도움이되었습니다.
msqar

3
백 스페이스, 화살표, 제어 키 및 기타 필요한 키 입력을 고려하지 않기 때문에 이것은 나쁜 해결책입니다.
DriverDan 2016 년

방금 이것과 비슷한 솔루션을 게시했지만 백 스페이스, 화살표를 처리하고 하드 코딩 된 키 코드를 사용하지 않습니다. 여기 체크 아웃 : stackoverflow.com/a/23468513/838608
하바드 Geithus


9

키 다운시 알파벳의 마법 모양과 사라짐이 보이지 않습니다. 이것은 마우스 페이스트에서도 작동합니다.

$('#txtInt').bind('input propertychange', function () {
    $(this).val($(this).val().replace(/[^0-9]/g, ''));
});

소수를 허용하지는 않지만 이것이 정수에 대한 가장 간단한 방법이라는 것을 알았습니다.
nickdnk

십진수의 경우 정규 표현식을 다음과 같이 업데이트 할 수 있습니다./[^0-9.]/g
Null Head

소수는 필요하지 않습니다. OP가
그랬기

8

먼저 jQuery를 사용 하여이 문제를 해결하려고 시도했지만 키 입력시 제거되기 직전에 입력 필드에 원하지 않는 문자 (숫자가 아닌)가 실제로 나타나는 것에 대해서는 만족하지 않았습니다.

다른 해결책을 찾고 이것을 찾았습니다.

정수 (음이 아닌)

<script>
  function numbersOnly(oToCheckField, oKeyEvent) {
    return oKeyEvent.charCode === 0 ||
        /\d/.test(String.fromCharCode(oKeyEvent.charCode));
  }
</script>

<form name="myForm">
<p>Enter numbers only: <input type="text" name="myInput" 
    onkeypress="return numbersOnly(this, event);" 
    onpaste="return false;" /></p>
</form>

출처 : https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example 라이브 예 : http://jsfiddle.net/u8sZq/

소수점 (음수가 아님)

단일 소수점을 허용하려면 다음과 같이 할 수 있습니다.

<script>
  function numbersOnly(oToCheckField, oKeyEvent) {        
    var s = String.fromCharCode(oKeyEvent.charCode);
    var containsDecimalPoint = /\./.test(oToCheckField.value);
    return oKeyEvent.charCode === 0 || /\d/.test(s) || 
        /\./.test(s) && !containsDecimalPoint;
  }
</script>

출처 : 방금 썼습니다. 작동하는 것 같습니다. 라이브 예 : http://jsfiddle.net/tjBsF/

다른 사용자 정의

  • 더 많은 기호를 입력 할 수있게하려면 기본 문자 코드 필터 역할을하는 정규식에 추가하십시오.
  • 간단한 컨텍스트 제한을 구현하려면 입력 필드 (oToCheckField.value)의 현재 내용 (상태)을 확인하십시오.

관심을 가질만한 것들 :

  • 소수점 하나만 허용
  • 빼기 부호는 문자열의 시작 부분에있는 경우에만 허용하십시오. 이것은 음수를 허용합니다.

단점

  • 기능 내에서 캐럿 위치를 사용할 수 없습니다. 이를 통해 구현할 수있는 컨텍스트 제한이 크게 줄어 듭니다 (예 : 두 개의 연속 된 심볼이 없음). 액세스하는 가장 좋은 방법이 무엇인지 잘 모르겠습니다.

제목이 jQuery 솔루션을 요구한다는 것을 알고 있지만 어쨌든 누군가가 유용 할 것입니다.


6

게시물 Aaron Aaron Smith에 감사드립니다.

소수점과 숫자의 숫자 부분을 허용하도록 답변을 편집했습니다. 이 작업은 나에게 완벽합니다.

$(".numeric").keypress(function(event) {
  // Backspace, tab, enter, end, home, left, right,decimal(.)in number part, decimal(.) in alphabet
  // We don't support the del key in Opera because del == . == 46.
  var controlKeys = [8, 9, 13, 35, 36, 37, 39,110,190];
  // IE doesn't support indexOf
  var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
  // Some browsers just don't raise events for control keys. Easy.
  // e.g. Safari backspace.
  if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
      (49 <= event.which && event.which <= 57) || // Always 1 through 9
      (96 <= event.which && event.which <= 106) || // Always 1 through 9 from number section 
      (48 == event.which && $(this).attr("value")) || // No 0 first digit
      (96 == event.which && $(this).attr("value")) || // No 0 first digit from number section
      isControlKey) { // Opera assigns values for control keys.
    return;
  } else {
    event.preventDefault();
  }
});

6
   window.jQuery.fn.ForceNumericOnly =
       function () {

           return this.each(function () {
               $(this).keydown(function (event) {
                   // Allow: backspace, delete, tab, escape, and enter
                   if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
                       // Allow: Ctrl+A
                       (event.keyCode == 65 && event.ctrlKey === true) ||
                       // Allow: home, end, left, right
                       (event.keyCode >= 35 && event.keyCode <= 39)) {
                       // let it happen, don't do anything
                       return;
                   } else {
                       // Ensure that it is a number and stop the keypress
                       if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                           event.preventDefault();
                       }
                   }
               });
           });
       };

그리고 원하는 모든 입력에 적용하십시오.

$('selector').ForceNumericOnly();

5

2015 년 10 월 현재 CanIUse에 따르면 HTML5는 전역 브라우저 지원 88 % 이상으로 입력 유형 번호를 지원합니다.

<input type="number" step="0.01" min="0" name="askedPrice" id="askedPrice" />

이것은 JQuery 관련 솔루션은 아니지만 휴대 전화에서 Android 키보드가 숫자를 입력하도록 최적화된다는 이점이 있습니다.

또는 새 매개 변수 "pattern"과 함께 입력 유형 텍스트를 사용할 수 있습니다. HTML5 사양에 대한 자세한 내용

이 질문에서 jquery 솔루션이 수천 구분 기호를 지원하지 않기 때문에 jquery 솔루션보다 낫다고 생각합니다. html5를 사용할 수있는 경우

JSFiddle : https://jsfiddle.net/p1ue8qxj/


4

이 기능은 동일한 작업을 수행하며 위의 아이디어 중 일부를 사용합니다.

$field.keyup(function(){
    var val = $j(this).val();
    if(isNaN(val)){
         val = val.replace(/[^0-9\.]/g,'');
         if(val.split('.').length>2) val =val.replace(/\.+$/,"");
    }
    $j(this).val(val); 
});
  • 시각적 피드백 표시 (사라지기 전에 잘못된 문자가 나타남)
  • 소수를 허용
  • 여러 개의 "."를 잡습니다.
  • 왼쪽 / 오른쪽 델 등에는 문제가 없습니다.

4

/ * 이것은 jQuery를 사용하여 HTML 입력 상자에 숫자 (0-9) 만 허용하는 방법의 크로스 브라우저 버전 입니까?
* /

$("#inputPrice").keydown(function(e){
    var keyPressed;
    if (!e) var e = window.event;
    if (e.keyCode) keyPressed = e.keyCode;
    else if (e.which) keyPressed = e.which;
    var hasDecimalPoint = (($(this).val().split('.').length-1)>0);
    if ( keyPressed == 46 || keyPressed == 8 ||((keyPressed == 190||keyPressed == 110)&&(!hasDecimalPoint && !e.shiftKey)) || keyPressed == 9 || keyPressed == 27 || keyPressed == 13 ||
             // Allow: Ctrl+A
            (keyPressed == 65 && e.ctrlKey === true) ||
             // Allow: home, end, left, right
            (keyPressed >= 35 && keyPressed <= 39)) {
                 // let it happen, don't do anything
                 return;
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (e.shiftKey || (keyPressed < 48 || keyPressed > 57) && (keyPressed < 96 || keyPressed > 105 )) {
                e.preventDefault();
            }
        }

  });


3

decorplanit.com에서 autoNumeric을 사용할 수 있습니다 . 통화, 반올림 등 숫자를 잘 지원합니다.

CSS 조정이 거의없는 IE6 환경에서 사용했으며 합리적인 성공이었습니다.

예를 들어 CSS 클래스를 numericInput정의 할 수 있으며 숫자 입력 마스크로 필드를 장식하는 데 사용할 수 있습니다.

autoNumeric 웹 사이트에서 수정 :

$('input.numericInput').autoNumeric({aSep: '.', aDec: ','}); // very flexible!

autoNumeric은 확실히가는 길입니다
Prethen

3

나는 이것이이 문제를 해결하는 좋은 방법이라고 생각하며 매우 간단합니다.

$(function() {
    var pastValue, pastSelectionStart, pastSelectionEnd;

    $("input").on("keydown", function() {
        pastValue          = this.value;
        pastSelectionStart = this.selectionStart;
        pastSelectionEnd   = this.selectionEnd;
    }).on("input propertychange", function() {
        var regex = /^[0-9]+\.?[0-9]*$/;

        if (this.value.length > 0 && !regex.test(this.value)) {
            this.value          = pastValue;
            this.selectionStart = pastSelectionStart;
            this.selectionEnd   = pastSelectionEnd;
        }
    });
});

예 : JSFiddle

시나리오 다루기

여기에서 가장 유사한 권장 사항은 이들 중 하나 이상에 실패하거나 이러한 모든 시나리오를 다루기 위해 많은 코드가 필요합니다.

  1. 소수점 1 개만 허용합니다.
  2. 할 수 있습니다 home, end그리고 arrow키.
  3. deletebackspace어떤 인덱스에 사용되는.
  4. 입력이 정규식과 일치하는 한 모든 인덱스에서 편집 할 수 있습니다.
  5. 유효한 입력을 위해 ctrl + v 및 shift + insert를 허용합니다 (오른쪽 클릭 + 붙여 넣기와 동일).
  6. keyup이벤트가 사용되지 않기 때문에 텍스트 값이 깜박 이지 않습니다.
  7. 유효하지 않은 입력 후 선택을 복원합니다.

시나리오 실패

  • 0.50으로 시작 하고 삭제하면 작동하지 않습니다. 텍스트 상자가 소수점으로 시작할 때 (원하는 경우) 정규 표현식을 변경 /^[0-9]*\.?[0-9]*$/한 다음 흐림 이벤트를 추가하여 이를 해결할 수 있습니다 0. 이 문제를 해결하는 방법에 대한 자세한 내용은이 고급 시나리오 를 참조하십시오 .

플러그인

이 간단한 jquery 플러그인 을 만들어 쉽게 만들었습니다 .

$("input").limitRegex(/^[0-9]+\.?[0-9]*$/);

2

가장 좋은 방법은 포커스를 잃을 때마다 텍스트 상자의 contects를 확인하는 것입니다.

정규식을 사용하여 내용이 "숫자"인지 확인할 수 있습니다.

또는 기본적으로 자동으로 수행되는 유효성 검사 플러그인을 사용할 수 있습니다.


정규식은 /^\d*\.{0,1}\d+$/입니다.
Chetan S

2

데이터베이스 사용을 위해이 찾기 코드를 확인하십시오.

function numonly(root){
    >>var reet = root.value;
    var arr1 = reet.length;
    var ruut = reet.charAt(arr1-1);
    >>>if (reet.length > 0){
        var regex = /[0-9]|\./;
        if (!ruut.match(regex)){
            var reet = reet.slice(0, -1);
            $(root).val(reet);
        >>>>}
    }
}
//Then use the even handler onkeyup='numonly(this)'

2

이것은 텍스트 필드에서 정수 백분율 유효성 검사를 위해 방금 수행 한 스 니펫 (Peter Mortensen / Keith Bentrup의 코드 일부 사용)입니다 (jQuery 필요).

/* This validates that the value of the text box corresponds
 * to a percentage expressed as an integer between 1 and 100,
 * otherwise adjust the text box value for this condition is met. */
$("[id*='percent_textfield']").keyup(function(e){
    if (!isNaN(parseInt(this.value,10))) {
        this.value = parseInt(this.value);
    } else {
        this.value = 0;
    }
    this.value = this.value.replace(/[^0-9]/g, '');
    if (parseInt(this.value,10) > 100) {
        this.value = 100;
        return;
    }
});

이 코드는 :

  • 기본 숫자 키와 숫자 키패드를 사용할 수 있습니다.
  • Shift- 숫자 문자 (예 : #, $, % 등)를 제외하도록 확인합니다.
  • NaN 값을 0으로 대체
  • 100보다 큰 100으로 대체

이것이 도움이 필요한 사람들에게 도움이되기를 바랍니다.



2

HTML5를 사용하는 경우 유효성 검사를 수행하기 위해 많은 시간을 들일 필요가 없습니다. 그냥 사용하십시오-

<input type="number" step="any" />

step 속성은 소수점을 유효하게합니다.


2
Firefox & Opera는 숫자가 아닌 텍스트 입력을 허용합니다
Michael Fever

@MichaelDeMutis 맞습니다. 숫자가 아닌 텍스트 입력은 허용하지만 FF에서는 유효성 검사에 실패합니다 (오페라에서 테스트 할 기회가 없었습니다).
Jay Blanchard

2

입력에서 캐럿 위치를 유지하는 다른 방법 :

$(document).ready(function() {
  $('.numbersOnly').on('input', function() {
    var position = this.selectionStart - 1;

    fixed = this.value.replace(/[^0-9\.]/g, '');  //remove all but number and .
    if(fixed.charAt(0) === '.')                  //can't start with .
      fixed = fixed.slice(1);

    var pos = fixed.indexOf(".") + 1;
    if(pos >= 0)
      fixed = fixed.substr(0,pos) + fixed.slice(pos).replace('.', '');  //avoid more than one .

    if (this.value !== fixed) {
      this.value = fixed;
      this.selectionStart = position;
      this.selectionEnd = position;
    }
  });
});

장점 :

  1. 사용자는 화살표 키, 백 스페이스, 삭제 등을 사용할 수 있습니다.
  2. 숫자를 붙여 넣을 때 작동

플 런커 : 데모 작업



1
    $(".numeric").keypress(function(event) {
  // Backspace, tab, enter, end, home, left, right
  // We don't support the del key in Opera because del == . == 46.
  var controlKeys = [8, 9, 13, 35, 36, 37, 39];
  // IE doesn't support indexOf
  var isControlKey = controlKeys.join(",").match(new RegExp(event.which));
  // Some browsers just don't raise events for control keys. Easy.
  // e.g. Safari backspace.
  if (!event.which || // Control keys in most browsers. e.g. Firefox tab is 0
      (49 <= event.which && event.which <= 57) || // Always 1 through 9
      (48 == event.which && $(this).attr("value")) || // No 0 first digit
      isControlKey) { // Opera assigns values for control keys.
    return;
  } else {
    event.preventDefault();
  }
});

이 코드는 꽤 잘 작동했습니다. 제어 키 배열에 46을 추가해야 마침표를 사용할 수는 있지만 최선의 방법이라고 생각하지는 않습니다.)


1

나는 이것을 좋은 결과와 함께 사용했다.

ini=$("#id").val();
a=0;
$("#id").keyup(function(e){
    var charcode = (e.which) ? e.which : e.keyCode;
    // for decimal point
    if(!(charcode===190 || charcode===110))
    {           // for numeric keys andcontrol keys
        if (!((charcode>=33 && charcode<=57) || 
        // for numpad numeric keys
        (charcode>=96 && charcode<=105) 
        // for backspace
        || charcode==8)) 
        {
            alert("Sorry! Only numeric values allowed.");
            $("#id").val(ini);
        }
        // to include decimal point if first one has been deleted.
        if(charcode===8)
        {
            ini=ini.split("").reverse();
            if(ini[0]==".")
            a=0;                 
        }
    }
    else
    {
        if(a==1)
        {
            alert("Sorry! Second decimal point not allowed.");
            $("#id").val(ini);
        }
        a=1;
    }
    ini=$("#id").val();
});


find keycodes at http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

1

이것은 우리가 이미 자바 스크립트 내장 함수 "isNaN"을 가지고 있다는 매우 간단합니다.

$("#numeric").keydown(function(e){
  if (isNaN(String.fromCharCode(e.which))){ 
    return false; 
  }
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.