好的,所以我一直在尝试使用jQuery来验证表单(没有插件)。现在我' M卡上,当信用卡,VISA,万事达,美国运通单选按钮,被选中,那么我需要验证使用正则表达式的信用卡号码,这样,如果一个单选按钮被选中,但没有输入卡号然后出现错误消息。
我还需要验证过期月份和年份,但我不知道从哪里开始。
这就是我对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();
}
}
答案 0 :(得分:0)
$paymenet
和$paymentType
被宣布为什么?你确认他们正在接受你期待的元素吗?
您正在显示的错误消息Must contain a 13- 16 digit number with no spaces or dashes!
也与正则表达式的操作不匹配。你的正则表达式目前正在检查由破折号分隔的四组四位数字。
匹配您正在显示的错误的正则表达式为/^\d{13,16}$/
或者,您可以忽略用户在支票中输入的非数字:if(!creditCardPattern.test($paymentType.val().replace(/\D/g,''))){ ... }
答案 1 :(得分:0)
首先,如上所述,目前尚不清楚$ paymenet和$ paymentType的来源。他们早些时候宣布了吗
我已经在this Fiddle中对您的解决方案进行了一些测试,您的问题似乎在于如何选择已选中的单选按钮。
当我选择这样的时候,我没有任何问题:
var $creditcardVendor = $("#paymentMethod").find(":checked");
关键是选择的根元素{在这种情况下为#paymentMethod
只包含一组单选按钮/复选框。我无法通过实际的regexvalidation发现任何明显的技术问题,因此该部分应该可以工作。
Sidenote 1 - 您的标签无法正常工作。向他们添加for="<some id>"
以减少用户的挫败感。
Sidenote 2 - 你需要&#34;无&#34; -option?由于您无法在没有CC供应商的情况下使用CC,因此您可以使用$creditcardVendor.length
检查选择。如果长度为零,则不存在选中的选项,也不选择供应商。如果它是1,则选择供应商。