function demoMatchClick() {
var validString = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/
var re = new RegExp(validString);
if (document.form1.subject.value.test(re)) {
alert("Successful match");
} else {
alert("No match");
}
}
<INPUT TYPE=SUBMIT VALUE="Replace" ONCLICK="demoReplaceClick()">
我无法弹出警告弹出
我希望强制执行这些规则
•Not have upper-case letters. •Begin with a letter. •Have at least 1 digit(s) not at the beginning and end. •Have up to 8 alphanumeric •Does NOT have any symbols like @#$ characters (symbols like !@#$%^&*()-+).
我现在使用按钮执行代码。
答案 0 :(得分:1)
以下是修改后的代码:
function demoMatchClick(input) {
var validString = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/;
if (validString.test(input)) {
alert("Successful match");
} else {
alert("No match");
}
}
demoMatchClick("hello world");
validString变量已经是一个RegExp对象,你可以直接使用它。另外.test()方法属于regex对象而不是字符串。
答案 1 :(得分:1)
好吧,我想这个正则表达式适合你的规则......
var rules = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/;
但我认为您的代码存在一些问题,我想指出。请不要将其视为个人冒犯,请:相信我,我实际上为你节省了大量的时间和精力。
首先,有一个标准规则:每个功能应该只做一件事 - 但做得非常好(或者他们说,这些完美主义者!)。你的代码与DOM提取过于紧密联系:当我粘贴在我的环境中时,我感到非常惊讶!只有这时我才注意到document.forms
电话。这里不需要它:构建一个带一个参数的函数就足够了,然后用其他地方提取的值调用这个函数。通过这种方式,顺便说一句,您可以轻松地分离错误原因:它可以是DOM部分,也可以是函数内部。
其次,正则表达式非常接近被认为是JavaScript中的一等公民(不像Perl那样,但仍然比其他语言更接近)。这意味着你可以按原样编写正则表达式文字,并在以后使用它 - 没有新的Regexp结构。
说了这么多,我把你的代码写成......
function validatePassword(password) {
var rules = /^[a-z](?=[a-z]*[0-9])[a-z0-9]{0,6}[a-z]$/;
return rules.test(password);
}
...然后通过像......这样的东西来使用它。
var password = document.form1.subject.value;
alert( validatePassword(password) ? 'Success! :)' : 'Failure... :(' );
P.S。是的,Riccardo是对的:为密码制定了过于严格的规则 - 并且遭受了缩小搜索攻击范围的后果。并且很容易看到Javascript中设置的验证规则:即使是混淆器也无济于事。