jQuery信用卡输入格式

jQuery credit card input format

我想对信用卡输入字段使用 jQuery 验证。当我搜索它时,我看到大多数人使用额外的验证方法实现了这一点。

我尝试将此添加到我的代码中:

<script src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/additional-methods.js"></script>

或此代码:

jQuery.validator.addMethod("lettersonly", function(value, element) {
  return this.optional(element) || /^[a-z]+$/i.test(value);
}, "Letters only please"); 

但是我遇到了这个错误

请问是不是版本问题,我用的是jQuery3.6版本,验证插件试过1.7和1.9版本

注意:我确定我在添加jQuery cdn后使用验证插件。我可以达到 jQuery 但不能达到 jQuery.validator 方法。

Addition:我正在尝试仅使用字母和空格来格式化姓名-姓氏输入字段。如果你也能帮助我,我会很高兴。(或者有没有为信用卡输入的每个输入字段准备的插件。)

编辑:

我现在使用的表格。

<form id="cardForm">
    <div class="input-group">
        <div class="card-input-row row w-100 mt-5">
            <div class="col-12">
                <label for="card-number" class="mb-1 input-group-label">Card Number</label>
                <input id="card-number" pattern="\d*" maxlength="19" type="text" placeholder="••••  ••••  ••••  ••••" class="form-control w-100 shadow mb-3 input-group-inputs">
            </div>
            <div class="col-12">
                <label for="cardName" class="mb-1 input-group-label">Name</label>
                <input id="cardName" type="text" placeholder="••••••••  ••••••••" class="form-control w-100 shadow input-group-inputs mb-3">
            </div>
            <div class="row" style="padding-right: 0px ">
                <div class="col-5" style="padding-right: 0px; padding-right: 0px;">
                    <label for="card-date" class="mb-1 input-group-label">Expiration Date</label>
                    <input id="card-date" type="text" placeholder="MM/YY" class="form-control w-100 shadow input-group-inputs">
                </div>
                <div class="col-2"></div>
                <div class="col-5" style="padding-right: 0px; padding-right: 0px;">
                    <label for="card-cvc" class="mb-1 input-group-label">CVC</label>
                    <input id="card-cvc" type="text" placeholder="•••" class="form-control w-100 shadow input-group-inputs">
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-6">
                <button class="btn btn-primary">Submit</button>
            </div>
        </div>
    </div>
</form>

并且给定的 jquery 示例添加如下:

$('#cardForm').validate({
    rules: {
        cardName: {
            required: true,
            lettersonly: true,
        },
    },
});

它没有给出任何错误,但它也不起作用。

我尝试了以下顺序,似乎一切正常,没有任何问题:

$("#cardName").on('input',function(event){
  const value = $(this).val();
  if (/^[A-Za-z]+$/gi.test(value) == false) {
    $(this).val(value.slice(0, -1));
  }
})

var month = 0;
$("#card-date").on('keypress',function(event) {
  if (event.charCode >= 48 && event.charCode <= 57) {
    if ($(this).val().length === 1) {
      $(this).val($(this).val() + event.key + "/");
    } else if ($(this).val().length === 0) {
      if (event.key == 1 || event.key == 0) {
        month = event.key;
        return event.charCode;
      } else {
        $(this).val(0 + event.key + "/");
      }
    } else if ($(this).val().length > 2 && $(this).val().length < 5) {
      return event.charCode;
    }
  }
  return false;
}).on('keyup',function(event) {
  if (event.keyCode == 8 && $("#card-date").val().length == 2) {
    $(this).val(month);
  }
})
<form id="cardForm">
  <div class="input-group">
    <div class="card-input-row row w-100 mt-5">
      <div class="col-12">
        <label for="card-number" class="mb-1 input-group-label">Card Number</label>
        <input id="card-number" pattern="\d*" maxlength="19" type="text" placeholder="••••  ••••  ••••  ••••" class="form-control w-100 shadow mb-3 input-group-inputs">
      </div>
      <div class="col-12">
        <label for="cardName" class="mb-1 input-group-label">Name</label>
        <input id="cardName" name="cardName" type="text" placeholder="••••••••  ••••••••" class="form-control w-100 shadow input-group-inputs mb-3">
      </div>
      <div class="row" style="padding-right: 0px ">
        <div class="col-5" style="padding-right: 0px; padding-right: 0px;">
          <label for="card-date" class="mb-1 input-group-label">Expiration Date</label>
          <input id="card-date" type="text" placeholder="MM/YY" class="form-control w-100 shadow input-group-inputs">
        </div>
        <div class="col-2"></div>
        <div class="col-5" style="padding-right: 0px; padding-right: 0px;">
          <label for="card-cvc" class="mb-1 input-group-label">CVC</label>
          <input id="card-cvc" type="text" placeholder="•••" class="form-control w-100 shadow input-group-inputs">
        </div>
      </div>
    </div>
    <div class="row">
      <div class="col-6">
        <button class="btn btn-primary">Submit</button>
      </div>
    </div>
  </div>
</form>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.19.1/additional-methods.min.js"></script>