【问题标题】:Alphanumeric validation字母数字验证
【发布时间】: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 数字,我想要实现的是显示错误:用户必须提供一个字母数字密码。感谢 AiorosPeeyush 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


【解决方案1】:

这个正则表达式可以帮助你:

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).*$/

正数 lookahead (?=) 匹配括号内的任何内容,而不是结果的一部分。在这里,我们希望正则表达式找到任何东西 (.*?) 的最小出现次数,然后是我们想要强制执行的字符(例如大写字母)。

所以这个正则表达式会检查:

  • 至少一个大写字母:(?=.*?[A-Z])
  • 至少一个小写字母:(?=.*?[a-z])
  • 至少一位:(?=.*?[0-9])

查看:https://jsfiddle.net/q7do1woL/

另外,如果你想用正则表达式验证字符串的长度,你可以添加一个具有最小值的量词:

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$/

希望对你有帮助。

【讨论】:

  • 这很酷,伙计!我从来没有深入研究过正则表达式,因为它们总是让我有点害怕,但这是解决我的问题的最干净的解决方案!谢谢,我要学习更多关于正则表达式的知识
猜你喜欢
  • 2012-07-16
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多