【问题标题】:How to get jQuery validate to allow numbers to include dashes如何让 jQuery 验证允许数字包含破折号
【发布时间】:2018-09-11 19:59:31
【问题描述】:

我发现之前有人问过这个问题,并看到建议是添加一个名为 alphanumeric 的方法。我尝试添加此方法,但验证仍然不接受带有破折号的电话号码。

有人看到我做错了吗?

$('#phone').keyup(function() {
		jQuery.validator.addMethod("alphanumeric", function(value, element) {
			return this.optional(element) || /^[a-z0-9\-]+$/i.test(value);
		}, "Numbers and dashes only");
	});
  $('#salesforce_submit').validate({
		rules: {
			phone: {
				required: true,
				//digits: true,
				minlength: 10,
				alphanumeric: true		
			}
		},
		messages: {
			phone: {
				required: "Please enter your phone number",
				digits: "Please enter a valid phone number with only numbers",
				minlength: "Your number seems a bit short, doesn't it?"
			}
		},
		submitHandler: function(form) {
			event.preventDefault();
			var datastring = $('#salesforce_submit').serialize();
			$.ajax({
				url: '/php/quoteSend.php',
				type: 'POST',
				data: datastring
				,
				success: function(data) {
					console.log(data);
					if (data == 'Error!') {
						alert('Unable to submit form!');
					} else {
					}
				},
				error: function(xhr, textStatus, errorThrown) {
					alert(textStatus + '|' + errorThrown);
					console.log('error');
				}
			});
   }
})   
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script>
<form id="salesforce_submit" method="POST" enctype="multipart/form-data">
		<div><input id="phone" placeholder="Phone*" class="input block" maxlength="12" name="phone" type="phone"></div>
    <input type="Submit" Value="Submit">
</form>

【问题讨论】:

标签: javascript jquery jquery-validate alphanumeric


【解决方案1】:

您可以使用此代码来允许使用数字和破折号

jQuery.validator.addMethod("numericdashe", function (value, element) {
console.log(value);
  if (/^[0-9\-]+$/i.test(value)) {
      return true;
  } else {
      return false;
  };
}, "Numbers and dashes only");

添加 numericdashe 角色

phone: {
            required: true,
            //digits: true,
            minlength: 10,
            //alphanumeric: true
            numericdashe: true      
        }
    },

无需在keyup 监听器中添加jQuery.validator.addMethod

【讨论】:

  • 感谢您识别并指出 OP 的 keyup 错误。
【解决方案2】:

你的正则表达式有问题。

This regex 工作:/^[+][(]{0,1}[0-9]{1,3}[)]{0,1}[-\s./0- 9]$/i

working fiddle

$('#phone').keyup(function() {
		jQuery.validator.addMethod("alphanumeric", function(value, element) {
			return this.optional(element) || /^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/i.test(value);
		}, "Numbers and dashes only");
	});
  $('#salesforce_submit').validate({
		rules: {
			phone: {
				required: true,
				//digits: true,
				minlength: 10,
				alphanumeric: true		
			}
		},
		messages: {
			phone: {
				required: "Please enter your phone number",
				digits: "Please enter a valid phone number with only numbers",
				minlength: "Your number seems a bit short, doesn't it?"
			}
		},
		submitHandler: function(form) {
			event.preventDefault();
			var datastring = $('#salesforce_submit').serialize();
      
			$.ajax({
				url: '/php/quoteSend.php',
				type: 'POST',
				data: datastring
				,
				success: function(data) {
					console.log(data);
					if (data == 'Error!') {
						alert('Unable to submit form!');
					} else {
					}
				},
				error: function(xhr, textStatus, errorThrown) {
					alert(textStatus + '|' + errorThrown);
					console.log('error');
				}
			});
   }
})   
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script>
<form id="salesforce_submit" method="POST" enctype="multipart/form-data">
		<div><input id="phone" placeholder="Phone*" class="input block" maxlength="12" name="phone" type="phone"></div>
    <input type="Submit" Value="Submit">
</form>

【讨论】:

  • 您在答案中保留了 OP 的不正确结构。仅供参考,每次在一个特定字段中按下一个键时,触发.addMethod() 是没有意义的。只需触发一次即可创建新规则。
  • @Sparky,OP 特别要求找出她/他的代码有什么问题,以使其无法正常工作。我只是指出了它到底错在哪里。不确定 OP 是否要求对其代码进行重大更改。
  • 您的回答质量是您的事。我只是指出你的现场演示是如何构建不正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多