我有以下JS代码:
修改
function validateForm() {
var IsOk = true;
var RegNumbers = (/^[0-9]+$/);
var iChars = "!@#$%^&*()+=-[]\';,/{}|\":<>?";
if (Fname == null || Fname == "") {
alert("can't be empty");
IsOk = false;
}
else if (Fname.length < 2) {
alert("the iput too short ");
IsOk = false;
}
else if (Fname != "") {
if (RegNumbers.test(Fname)) {
alert("Fname can't include numbers");
IsOk = false;
}
for (var i=0; i<Fname.length;) {
if (iChars.indexOf(Fname[i]) != -1) {
IsOk = false; alert('no special chracters pleas!');
break;
}
}
}
}
问题是当输入是特殊字符时,没有警告它是不允许的。为什么?? 希望得到帮助。感谢
答案 0 :(得分:2)
这一行:
if (iChars.indexOf(Fname) >= 0) {
仅测试Fname
字符串是否在iChars
内。除了极少数情况,您只测试Fname
是否是包含特殊字符的一个字符串。
要保持相同的逻辑(不使用正则表达式),您必须迭代Fname:
for (var i=0; i<Fname.length; i++) {
if (iChars.indexOf(Fname[i]) >= 0) {
alert('...');
IsOk = false;
break;
}
}
您可以使用正则表达式“简化”:
if (Fname.match(/[\!\@#\$\%\^\&\*\(\)\+\=\-\[\]\\\'\;\,\/\{\}\|\"\:\<\>\?]/)) {
alert('...');
IsOk = false;
}
答案 1 :(得分:1)
您需要测试任何一个字符,最好的方法是使用正则表达式:
var iChars = "!@#$%^&*()+=-[]\';,/{}|\":<>?";
, iRx = new RegExp( '[\\' + iChars.split('').join( '\\' ) + ']' );
...
if( iRx.test( Fname ) ) {
...
}
这样做会将您的特殊字符列表转换为正则表达式:
[\!\@\#...]
意味着如果这些字符中的任何字符在字符串中的任何位置,它将匹配
任何FYI,您都不需要==null
检查。它在功能上与==""
相同。你也不需要!= ""
检查(因为你已经检查过了)
您的号码正则表达式应为/[0-9]/
,否则foo22bar
将被允许。