用于检查护照代码的正则表达式

时间:2017-11-30 09:35:10

标签: javascript jquery regex

我有一个用于我的护照码的文本框,我想介绍一个正则表达式来检查keydown,护照代码由9个字符组成,只有我的 第一个字符是大写字母 其他字符只接受数字 。我在占位符中写了样本。

我编写了以下代码,但它不起作用。

我的正则表达式错了吗? 这是我的代码:

$(".passno").each(function(index, element) {
  $(this).bind('keydown', function(event) {
    switch (event.keyCode) {
      case 8: // Backspace
      case 9: // Tab
      case 13: // Enter
      case 37: // Left
      case 38: // Up
      case 39: // Right
      case 40: // Down
        break;
      default:
        var regex = new RegExp("^[A-Z0-9.,/ $@()]+$");
        var key = event.key;
        if (!regex.test(key)) {
          event.preventDefault();

          $(this).closest(".box-infoes").find(".error").css("display", "block")
          return false;
        } else {
          $(this).closest(".box-infoes").find(".error").css("display", "none")
        }
        break;
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input type="text" class="passno" placeholder="e.g.=J12345678" />
<div class="box-infoes">
  <div style="color:red; display:none;" class="error"> This Is a Wrong passportcode !</div>
</div>

4 个答案:

答案 0 :(得分:3)

您不应该在按下的键上进行测试,而应该测试生成的文本框值。

你会使用这个正则表达式:

var regex = new RegExp("^[A-Z][0-9]{8}$");

您不应仅测试按下的键的原因是您将无法确定它是否是第一个字符,并且也不会知道是否会使总长度不同于9。 ..

$(".passno").each(function(index, element) {
  $(this).bind('keyup', function(event) {
    var regex = new RegExp("^[A-Z][0-9]{8}$");
    var value = event.currentTarget.value;
    if (!regex.test(value)) {
      $(this).next(".box-infoes").find(".error").css("display", "block")
    } else {
      $(this).next(".box-infoes").find(".error").css("display", "none")
    }

  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<input type="text" class="passno" placeholder="e.g.=J12345678" />
<div class="box-infoes">
  <div style="color:red; display:none;" class="error"> This Is a Wrong passportcode !</div>
</div>

我简化了一切。无需测试密钥代码,因为我们将始终只使用输入的当前值。我在定位.closest()时也将.next()更改为.box-infoes,因为它们不是包含输入,而是兄弟姐妹。由于我们检查了值的长度,并且对于前8个字符无效,我们无法阻止用户输入,因此我删除了return falsepreventDefault()

答案 1 :(得分:1)

试试这个:

var regex = new RegExp("^[A-Z0-9.,/ $@()]+$");

这个在RegEx“/

中有问题
var regex = new RegExp("^[A-Z0-9.,\ $@()]+$");

但我建议这样做:

var regex = new RegExp("[A-Z]{1}\d{8}");

答案 2 :(得分:0)

如下所示,您似乎想要删除多余的字符然后检查符合您要求的值,这会将问题分解为两个功能,这两个功能相结合,为您提供所需的功能。

&#13;
&#13;
// remove any not uppercase or numerical characters from the input string
const sanitizePassport = x => x.replace(/[^A-Z0-9]+/g, '')

// check that a string matches capital letter followed by 8 numbers
const validatePassport = x => /^[A-Z]\d{8}$/.test(sanitizePassport(x))

console.log(
  sanitizePassport('(@A1234 5678)')
)

console.log(
  validatePassport('(A1234 5678)') // => true
)

console.log(
  validatePassport('a12345678') // => false
)

console.log(
  validatePassport('a1234567') // => false
)

console.log(
  validatePassport('a123456789') // => false
)
&#13;
<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

试试这个

table[m][j] = malloc(DEPTH * sizeof(*table[m][j]));

符合你的需要。