0

我有一个问题,自 2 天以来我一直在努力解决。我有一个网页询问电话号码,我正在尝试在输入选项卡中为电话号码创建一个“验证器”,但似乎我无法弄清楚如何检查输入选项卡的最小长度,也不是如何只接受数字字符。这是代码:

    $("#start").click(function(){ // click func
    if ($.trim($('#phonenr').val()) == ''){
     $("#error").show();

我尝试添加:

     if ($.trim($('#phonenr').val()) == '') && ($.trim($('#phonenr').val().length) < 15)

但它只是行不通。任何帮助,将不胜感激。另外请告诉我如何让它只允许数字?

谢谢!

最终代码,在@Saumya Rastogi 的帮助下。$("#start").click(函数(){

    var reg = /^\d+$/;
    var input_str = $('#phonenr').val();
   chopped_str = input_str.substring(0, input_str.length - 1);
   if(!reg.test(input_str)) {
    $("#error").show();
    return;
}
if(($.trim(input_str) == '') || ($.trim(input_str).length < 15)) {
  $("#error").show();
} else {
4

3 回答 3

1

您可以使您的验证工作。

您可以使用test(Regex Match Test) 仅接受输入文本中的数字。只需使用 javascriptsubstring来砍掉输入的非数字字符,如下所示:

$(function() {
	$('#btn').on('click',function(e) {
  	var reg = /^\d+$/; // <------ regex for validatin the input should only be digits
    var input_str = $('#phonenr').val();
    chopped_str = input_str.substring(0, input_str.length - 1);
    if(!reg.test(input_str)) {
    	$('label.error').show();
        return;
    }
    if(($.trim(input_str) == '') || ($.trim(input_str).length < 15)) {
      $('label.error').show();
    } else {
      $('label.error').hide();
    }
  });
})
label.error {
  display: none;
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="phonenr" type="text" value=""><br>
<label class='error'>Invalid Number</label>
<br><br>
<button id="btn">Click to Validate</button>

希望这可以帮助!

于 2016-12-23T15:22:26.843 回答
1

如果您使用的是 HTML5,那么您可以使用number可用的新输入类型

<input type="number" name="phone" min="10" max="10">

您还可以使用该pattern属性将输入限制为特定的正则表达式。

于 2016-12-23T14:58:28.177 回答
0

如果您正在寻找最简单的方法来检查模式的输入并根据有效性显示消息,那么使用正则表达式就是您想要的:

// Wait until the DOM has been fully parsed
window.addEventListener("DOMContentLoaded", function(){

  // Get DOM references:
  var theForm = document.querySelector("#frmTest");
  var thePhone = document.querySelector("#txtPhone");
  var btnSubmit = document.querySelector("#btnSubmit");
  
  // Hook into desired events. Here, we'll validate as text is inputted
  // into the text field, when the submit button is clicked and when the 
  // form is submitted
  theForm.addEventListener("submit", validate);
  btnSubmit.addEventListener("click", validate);
  thePhone.addEventListener("input", validate);
  
  // The simple validation function
  function validate(evt){
    var errorMessage = "Not a valid phone number!";
    
    // Just check the input against a regular expression
    // This one expects 10 digits in a row.
    // If the pattern is matched the form is allowed to submit,
    // if not, the error message appears and the form doesn't submit.
    !thePhone.value.match(/\d{3}\d{3}\d{4}/) ? 
      thePhone.nextElementSibling.textContent = errorMessage :	thePhone.nextElementSibling.textContent = ""; 
      evt.preventDefault();
  }
 
});
span {
  background: #ff0;
}
<form id="frmTest" action="#" method="post">
  <input id="txtPhone" name="txtPhone"><span></span>
  <br>
  <input type="submit" id="btnSubmit">
</form>

或者,您可以对流程进行更多控制,并使用pattern带有正则表达式的 HTML5 属性来验证条目。同时检查长度和数字。

然后,您可以使用setCustomValidity()方法通过 HTML5 验证 API 实现您自己的自定义错误消息。

<form id="frmTest" action="#" method="post">
  <input type="tel" id="txtPhone" name="txtPhone" maxlength="20"
         placeholder="555-555-5555" title="555-555-5555"
         pattern="\d{3}-\d{3}-\d{4}" required>
  <input type="submit" id="btnSubmit">
</form> 

Stack Overflow 的代码片段环境不能很好地处理表单,但可以在此处看到一个正常工作的 Fiddle 。

于 2016-12-23T15:28:03.370 回答