[javascript] 텍스트 상자에 대한 입력 제한 : 숫자와 소수점 만 허용

숫자와 소수점 만 허용하도록 텍스트 상자에 입력을 제한하려면 어떻게해야합니까?



답변

<HTML>
  <HEAD>
    <SCRIPT language=Javascript>
       <!--
       function isNumberKey(evt)
       {
          var charCode = (evt.which) ? evt.which : evt.keyCode;
          if (charCode != 46 && charCode > 31 
            && (charCode < 48 || charCode > 57))
             return false;

          return true;
       }
       //-->
    </SCRIPT>
  </HEAD>
  <BODY>
    <INPUT id="txtChar" onkeypress="return isNumberKey(event)" 
           type="text" name="txtChar">
  </BODY>
</HTML>

이것은 정말로 작동합니다!


답변

form.onsubmit = function(){
    return textarea.value.match(/^\d+(\.\d+)?$/);
}

이것이 당신이 찾고있는 것입니까?

도움이되기를 바랍니다.

편집 : 마침표가 하나만있을 수 있도록 위의 예제를 편집했습니다. 마침표는 하나 이상이고 그 뒤에는 하나 이상의 숫자가 있습니다.


답변

예를 들어 24 …. 22..22와 같이 여러 개의 ‘.’를 입력 할 수 있으므로 허용되는 솔루션이 완전하지 않습니다. 약간의 수정으로 의도 한대로 작동합니다.

<html>

<head>
  <script type="text/javascript">
    function isNumberKey(txt, evt) {
      var charCode = (evt.which) ? evt.which : evt.keyCode;
      if (charCode == 46) {
        //Check if the text already contains the . character
        if (txt.value.indexOf('.') === -1) {
          return true;
        } else {
          return false;
        }
      } else {
        if (charCode > 31 &&
          (charCode < 48 || charCode > 57))
          return false;
      }
      return true;
    }
  </script>
</head>

<body>
  <input type="text" onkeypress="return isNumberKey(this, event);" />
</body>

</html>


답변

다음은 십진수를 허용하고 소수점 이하 자릿수를 소수점 이하 2 자리로 제한하는 또 다른 솔루션입니다.

function isNumberKey(evt, element) {
  var charCode = (evt.which) ? evt.which : event.keyCode
  if (charCode > 31 && (charCode < 48 || charCode > 57) && !(charCode == 46 || charCode == 8))
    return false;
  else {
    var len = $(element).val().length;
    var index = $(element).val().indexOf('.');
    if (index > 0 && charCode == 46) {
      return false;
    }
    if (index > 0) {
      var CharAfterdot = (len + 1) - index;
      if (CharAfterdot > 3) {
        return false;
      }
    }

  }
  return true;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" id="rate" placeholder="Billing Rate" required onkeypress="return isNumberKey(event,this)">


답변

여기에 제시된 모든 솔루션은 단일 키 이벤트를 사용합니다. copy’n’paste 또는 drag’n’drop을 사용하여 입력을 제공 할 수도 있기 때문에 이것은 오류가 발생하기 쉽습니다. 또한 솔루션의 일부는 키가 같은 비 문자의 사용 제한 ctrl+c, Pos1

모든 키 누름을 확인하는 대신 결과가 예상과 관련하여 유효한지 확인하는 것이 좋습니다.

var validNumber = new RegExp(/^\d*\.?\d*$/);
var lastValid = document.getElementById("test1").value;
function validateNumber(elem) {
  if (validNumber.test(elem.value)) {
    lastValid = elem.value;
  } else {
    elem.value = lastValid;
  }
}
<textarea id="test1" oninput="validateNumber(this);" ></textarea>

oninput이벤트는 텍스트 영역에서 무언가가 변경된 직후와 렌더링되기 전에 트리거됩니다.

허용하려는 숫자 형식으로 RegEx를 확장 할 수 있습니다. 이것은 단일 키 누름을 확인하는 것보다 훨씬 더 유지 관리 및 확장이 가능합니다.


답변

이와 같은 것을 찾고 있습니까?

   <HTML>
   <HEAD>
   <SCRIPT language=Javascript>
      <!--
      function isNumberKey(evt)
      {
         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
            return false;

         return true;
      }
      //-->
   </SCRIPT>
   </HEAD>
   <BODY>
      <INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar">
   </BODY>
  </HTML>


답변

Jquery에서이 방법을 적용하기 만하면 십진수로만 숫자를 받아들이도록 텍스트 상자의 유효성을 검사 할 수 있습니다.

function IsFloatOnly(element) {
var value = $(element).val();
var regExp ="^\\d+(\\.\\d+)?$";
return value.match(regExp);
}

여기에서 작동 데모를 참조 하십시오.