【发布时间】:2015-04-23 20:55:03
【问题描述】:
好的,所以我一直在尝试使用 jQuery 来验证表单(没有插件)。现在我被卡住了,当检查信用卡,签证,万事达卡,美国运通的单选按钮时,我需要使用正则表达式验证信用卡号,以便如果选中单选按钮但没有输入卡号然后那里是一个错误消息。
我还需要验证到期月份和年份,但我不确定从哪里开始。
这就是我对 HTML 和 jQuery 所拥有的。
HTML:
<!-- Credit card text box -->
<label for="cardNumber">Credit Card Number</label>
<input type="text" id="cardNumber" type="text" name="cardNumber"/>
<span id="cNhint" class="hint err-cNumber"></span><br>
<!-- Fieldset payment radio buttons -->
<fieldset id ="paymentMethod" data-role="paymentMethod">
<legend> Payment Method *</legend>
<input type="radio" id="paymentType" name="credit_card" value="None" checked="checked" />
<label>None</label>
<input type="radio" id="paymentType" class="cardType cardErr" name="credit_card" value="Visa" />
<label for="visa">Visa</label>
<input type="radio" id="paymentType" class="cardType cardErr" name="credit_card" value="MasterCard" />
<label for="mastercard">MasterCard</label>
<input type="radio" id="paymentType" class="cardType cardErr" name="credit_card" value="American Express" />
<label for="americanexpress">American Express</label>
</fieldset>
jQuery:
$cForm.submit(function(event) {
var creditCardPattern = /^\d{4}-\d{4}-\d{4}-\d{4}$/;
//credit card number
var $ccNumber = $('#cardNumber');
var $errccardNumber = $('.err-cNumber');
var errors = 0;
// This is not working
if ($paymenet.is(':checked')) {
if(!creditCardPattern.test($paymentType.val())) {
$errpayment.append('Must contain a 13- 16 digit number with no spaces or dashes!');
errors += 1;
}
}
if(errors >0) {
$('.error').append('Please edit the marked fields below to fix errors.');
event.preventDefault();
}
}
【问题讨论】:
-
您的验证应该根据位数自动检测输入的卡类型,您不应该让您的用户选择他们输入的卡。看这里:formvalidation.io/validators/creditCard
-
我实际上是在硬编码,而不是使用任何形式的插件或基础。另外根据要求,我必须在 jquery 中使用模式来验证,没有 html5 输入类型。