我有一个用于我的护照码的文本框,我想介绍一个正则表达式来检查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>
答案 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 false
和preventDefault()
。
答案 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)
如下所示,您似乎想要删除多余的字符然后检查符合您要求的值,这会将问题分解为两个功能,这两个功能相结合,为您提供所需的功能。
// 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;
答案 3 :(得分:0)
试试这个
table[m][j] = malloc(DEPTH * sizeof(*table[m][j]));
符合你的需要。