【发布时间】:2016-12-16 13:14:22
【问题描述】:
我不明白为什么这个字母数字检查/验证不起作用。我已经削减了其他开关选项(所有工作),因为唯一不起作用的检查是else if (!(pswRegex.test(inputValue)))。我不是 jQuery/Javascript 专家,所以我错过了什么吗?
当密码由字母(大写或非大写)和数字组成时,正则表达式检查应该仅允许密码。
$(document).ready(function(){
$('.req').on('input', function() {
var inputID = $(this).attr('id');
var inputValue = $(this).val();
var valueLenght = $(this).val().length;
switch (inputID) {
case "psw":
var pswRegex = /^[a-zA-Z0-9]+$/;
if (valueLenght < 8) {
$('#subButton').prop('disabled', true);
$('#err' + inputID).show().text("Password must be 8 carachters minimum");
}
else if (!(pswRegex.test(inputValue))) {
$('#subButton').prop('disabled', true);
$('#err' + inputID).show().text("Password must be alphanumeric");
}
else {
$('#subButton').prop('disabled', false);
$('#err' + inputID).hide();
}
break;
}
});
});
[EDIT]:如果inputValue 字符串包含only 字母或only 数字,我想要实现的是显示错误:用户必须提供一个字母数字密码。感谢 Aioros 和 Peeyush Kushwaha 我明白我不能只用一个正则表达式来实现这一点(至少根据我对正则表达式的实际了解),所以我改变了我的 @ 987654325@这个条件:
else if (/^[0-9]+$/.test(inputValue) || /^[a-zA-Z]+$/.test(inputValue)) {
$('#subButton').prop('disabled', true);
$('#err' + inputID).show().text("Password must be composed by both letters and numbers");
}
[EDIT 2]:PanterA 提供了另一种简洁优雅的解决方案。只有一个if 条件,您可以(仅)向用户显示一个错误声明,说明密码必须至少有 8 个字符长并且至少由: 一个大写字母,一个小写字母和一个数字。
var pswRegex = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$/;
if (!pswRegex.test(inputValue)) {
$('#subButton').prop('disabled', true);
$('#err' + inputID).show().text("Password must be at least 8 carachters long and composed by, at least, one capital letter, one lower case letter and one number");
}
【问题讨论】:
-
似乎在fiddle 中工作正常。什么不适合你?输入是什么?
-
@Aioros 也许我以错误的方式使用了正则表达式
test(),但我们假设var inputValue = "asdwerasd";-> 这应该从检查中返回false(!(pswRegex.test(inputValue)))并且,在你的文件,在console.log中打印regex,对吧?问题是它跳过了检查,就好像它总是在你的例子中显示true和在我的else语句中显示ok -
@brigo 它不应该返回 false,
/^[a-zA-Z0-9]+$/表示“字符或数字” -
嗯,是的,对于输入“asdwerasd”,它会说“ok”。不应该吗?
-
@brigo 您应该使用此新信息更新您的问题,以便有人可以帮助您找出所需的正则表达式(:
标签: javascript jquery regex