【问题标题】:Regular expression testing the new password [closed]正则表达式测试新密码[关闭]
【发布时间】:2012-09-28 14:19:40
【问题描述】:

您好,我正在开发一个用于测试密码字段的 javascript。但是我似乎无法让它工作。页面加载没有任何不好的事情发生,但脚本似乎无法正常工作。这是我到目前为止所写的。我希望它检查大小写字母、数字和非正则表达式。长度并不重要,只是它各有一个。这是我到目前为止所写的。

更新:找到了一种更简单的脚本编写方式。每当密码字段错误时,我都能得到它来提醒我。但我无法让真实的陈述在单击文档按钮的位置起作用。

var str= passwordFieldForm;
    var patt=/[a-z]/g;
    var patt2 = /[A-Z]/g; 
    var patt3 = /[0-9]/g; 
    var patt4 = /[~\!@#\$%\^&*_\-\+=`\|\\(\)\{\}\[\]:;"'<>,\.\?\/]/g; 

    var result=patt.test(str);
    var result2=patt2.test(str);
    var result3=patt3.test(str);
    var result4=patt4.test(str);

    if (!result)
      alert("Needs a lowercase letter");

    if (!result2)
      alert("Needs a Uppercase Letter")

    if (!result3)
      alert("Needs a Number.")

    if (!result4)
      alert("Needs a special character")


    if (result) && (result2) && (result3) && (result4) == true
      document.getElementById("kioskform:broswerPasswordSubmit").click();

【问题讨论】:

  • 你能为此创建一个 jsfiddle 吗?粗略一瞥表明您的大括号太多/太少了。
  • if result = 'true' 需要为 if result == 'true' 对于初学者
  • result == true 可能更好,因为根据 chrome 解释器,true != 'true'
  • if result = 'true' 实际上应该是if (result == true),或者只是if(result)
  • 提示:在浏览器上打开开发者控制台,您会立即看到语法错误。

标签: javascript regex


【解决方案1】:

这可能更接近你想要的,我没有测试过,但它应该更朝着正确的方向:

function test(password)
{
    var patt1 = /[a-z]/g;
    var patt2 = /[A-Z]/g;
    var patt3 = /[0-9]/g;
    var patt4 = /[~\!@#\$%\^&*_\-\+=`\|\\(\)\{\}\[\]:;"'<>,\.\?\/]/g;

    if (!patt1.test(password)) {
        return ("You need a lowercase letter.");
    }

    if (!patt2.test(password)) {
        return ("You need an uppercaseletter.");
    }

    if (!patt3.test(password)) {
        return ("You need a number.");
    }

    if (!patt4.test(password)) {
        return ("You need to use a one of the following characters '~!@#$%^&*_-+=`|\(){}[;.");
    }
}

【讨论】:

  • password 不是参数。另外:为什么需要多次调用该函数?
  • 我不知道,他在 OP 问题中的每个“if”语句中都会返回,你为什么不问他?我只是想让它不那么邪恶:-)
  • 在这种情况下 +1 减少邪恶! ;-)
  • 不知道邪恶的部分哈哈,我只是想知道你为什么称它为函数,我一定还在想python而不是js,不知道它是双向的。但是该代码似乎不适用于浏览器。我添加了一个应该可以工作但似乎没有工作的静态变量。
  • @Adrian Thompson Phillips 好吧,谢谢你提供的脚本帮助我制作了一个不那么邪恶的代码,哈哈。它看起来更好,我想谢谢你的帮助。
【解决方案2】:

这条线路有问题:

return ("you need to use a one of the following characters '~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/'.")

您需要转义引号和其中的斜线。

return ("you need to use a one of the following characters '~!@#$%^&*_-+=`|\\(){}[]:;\"'<>,.?/'.")

您还使用== 代替= 进行比较,使用true 代替"true"。并养成始终使用 { } 作为 if 语句内容的习惯,而不是依赖制表符。

【讨论】:

  • 感谢您向我指出这一点,非常感谢。
【解决方案3】:

您需要在上一次正则表达式测试中转义其中几个字符:

 var patt4 = /[~!@#$%\^&\*_-\+=`\|\(\)\{\}\[\]\:;"'<>,\.\?\/]/g;

如果有疑问,请使用反斜杠 \ 转义字符。如果您对不需要转义的角色进行转义,则不会发生任何事情。

【讨论】:

  • 感谢您向我指出这一点。真的很感激。
猜你喜欢
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 2011-02-28
  • 2011-04-30
相关资源
最近更新 更多