jQuery正则表达式无法正常工作

jQuery正则表达式无法正常工作,jquery,regex,testing,Jquery,Regex,Testing,我正在尝试使用正则表达式来提高电子邮件/密码输入字段的安全性,但由于找不到我做错了什么,所以我的工作很糟糕。因此,基本上我创建了两个变量,在其中存储我的正则表达式模式,然后我想使用jquery捕获提交按钮,以及当用户添加了正确的信息时('click'),例如,将他们重定向到下一页。我一直在测试我的正则表达式,它们符合我的要求-在使用.test()进行测试后,它们将返回电子邮件/密码的true。 下面是我试图构建的代码示例: var userValidation = /^[\w-]+@[\w-

我正在尝试使用正则表达式来提高电子邮件/密码输入字段的安全性,但由于找不到我做错了什么,所以我的工作很糟糕。因此,基本上我创建了两个变量,在其中存储我的正则表达式模式,然后我想使用jquery捕获提交按钮,以及当用户添加了正确的信息时('click'),例如,将他们重定向到下一页。我一直在测试我的正则表达式,它们符合我的要求-在使用.test()进行测试后,它们将返回电子邮件/密码的true。 下面是我试图构建的代码示例:

  var userValidation = /^[\w-]+@[\w-]+\.[A-Za-z_-]{2,4}$/;
  var passValidation = /((?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,15})/gm;
  console.log(userValidation.test('test@gmail.com')); // testing
  console.log(passValidation.test('12345678Kksad')); // testing
我试图运行的实际代码

$('.button').on('click', function(){
    if ($('#user') === userValidation && $('#pass') === passValidation){
        window.location.replace("http://stackoverflow.com");
    }else{
        console.log('not working properly');
    }
})

每次我在两个输入字段中输入email和password时,返回else语句与信息是否符合我的正则表达式无关。

您的代码中有几个问题

这是一个完整的例子

CSS


提交
JS

var-emailRegex=/^[\w-]+@[\w-]+\.[A-Za-z-]{2,4}$/;
var passRegex=/^(?=.*\d)(?=.[a-z])(?=.[a-z])[\da-zA-z]{8,}$/;
$('#表单')。提交(函数(事件){
event.prevendDefault();
//获取电子邮件和密码值
var email=$(this.find('input[name=email]').val();
var password=$(this.find('input[name=password]')).val();
//验证电子邮件和密码
if(emailRegex.test(电子邮件)和&passRegex.test(密码)){
window.location.replace(“http://stackoverflow.com");
}否则{
console.log(“工作不正常”);
}
});

您的代码中有几个问题

这是一个完整的例子

CSS


提交
JS

var-emailRegex=/^[\w-]+@[\w-]+\.[A-Za-z-]{2,4}$/;
var passRegex=/^(?=.*\d)(?=.[a-z])(?=.[a-z])[\da-zA-z]{8,}$/;
$('#表单')。提交(函数(事件){
event.prevendDefault();
//获取电子邮件和密码值
var email=$(this.find('input[name=email]').val();
var password=$(this.find('input[name=password]')).val();
//验证电子邮件和密码
if(emailRegex.test(电子邮件)和&passRegex.test(密码)){
window.location.replace(“http://stackoverflow.com");
}否则{
console.log(“工作不正常”);
}
});

或者,您可以对现有的事件处理程序函数进行微小更改,以使输入字段值与正则表达式相匹配

$('.button').on("click", function () {
  if ($('#user').val().match(userValidation) && $('#pass').val().match(passValidation)) {
      window.location.replace("http://stackoverflow.com");
  } else {
      console.log('not working properly');
  }
});

或者,您可以对现有的事件处理程序函数进行微小的更改,以使输入字段值与正则表达式相匹配

$('.button').on("click", function () {
  if ($('#user').val().match(userValidation) && $('#pass').val().match(passValidation)) {
      window.location.replace("http://stackoverflow.com");
  } else {
      console.log('not working properly');
  }
});

密码验证正则表达式中有几个问题:try
var passValidation=/^(?=\D*\D)(?=[^a-z]*[a-z])(?=[^a-z]*[a-z])。{8,15}$/。它必须强制以
^
/
$
锚定。密码验证正则表达式中有几个问题:try
var passValidation=/^(?=\D*\D)(?=[^a-z]*[a-z])(?=[^a-z]*[a-z])。{8,15}$/。必须强制使用
^
/
$
锚定它。
passValidation
对象的模式是错误的。五件事!1) 模式没有锚定在开头(
^
),因此,它在字符串的每个位置进行测试,直到最终成功(您只需要模式在位置0成功)。2) 该模式没有固定在结尾(
$
),因此密码可以超过15个字符。(如果缺少起始锚点,情况也是如此)3)捕获组无效。4) g(您只需要一个成功匹配)和m(为什么要更改锚定
^
$
?)的含义)修饰符也没用。5)
(?=.*d)
=>
(?=.*d)
请注意,
字符串.prototype.match
不适用于验证(您不关心具有匹配结果的数组),
RegExp.prototype.test
更适合此任务。是的,您是对的。密码和电子邮件正则表达式可以大大改进,但这不是问题的目标。他的代码不起作用不是因为它的正则表达式不好。这就是为什么我没有把答案集中在正则表达式上。这是代码审查网站的另一个问题“如何改进我的密码正则表达式”。我同意你关于
匹配
测试
->更新:)@LouisBarranqueiro,请不要建议对代码进行检查,因为这些问题几乎会立即关闭。
passValidation
对象的模式是错误的。五件事!1) 模式没有锚定在开头(
^
),因此,它在字符串的每个位置进行测试,直到最终成功(您只需要模式在位置0成功)。2) 该模式没有固定在结尾(
$
),因此密码可以超过15个字符。(如果缺少起始锚点,情况也是如此)3)捕获组无效。4) g(您只需要一个成功匹配)和m(为什么要更改锚定
^
$
?)的含义)修饰符也没用。5)
(?=.*d)
=>
(?=.*d)
请注意,
字符串.prototype.match
不适用于验证(您不关心具有匹配结果的数组),
RegExp.prototype.test
更适合此任务。是的,您是对的。密码和电子邮件正则表达式可以大大改进,但这不是问题的目标。他的代码不起作用不是因为它的正则表达式不好。这就是为什么我没有把答案集中在正则表达式上。这是代码审查网站的另一个问题“如何改进我的密码正则表达式”。我同意你的
匹配
测试
->更新:)@LouisBarranqueiro,请不要建议代码审查中出现问题,因为这些问题几乎会立即关闭。