此代码的目的是检查用户输入的名称。如果值包含-abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ
以外的值,则函数将抛出错误。
我无法使其工作,我不允许使用正则表达式。我也试过了String1.indexOf(usr.substr(i,1)) > -1)
,但这似乎都不起作用。
function nameValidation(username) {
var usr = document.getElementById("username").value;
usr = usr.trim();
var alpha = "-abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var ok = 1;
for (var i = 0; i < usr.length; i++) {
if (!isNaN(usr[i])) {
ok = 0;
break;
} else {
ok = 1;
document.getElementById("fnerror").innerHTML = "";
document.getElementById("username").style.borderColor = "lightgrey";
return true;
}
}
if (ok == 0) {
document.getElementById("fnerror").innerHTML = "X Enter Upper and lower case letters, hypen, apostrohe only please";
return false;
}
return true;
}
答案 0 :(得分:3)
像这样的东西,也许:
function isValidUsername(username) {
var alpha = "-'ABCDEFGHIJKLMNOPQRSTUVWXYZ";
username = username.toUpperCase();
for (var i = 0, l = username.length; i < l; i++) {
if (alpha.indexOf(username[i]) === -1) return false;
}
return true;
}
字符串大写更便宜,因此需要测试一组较短的字符(虽然可能是最好的边缘,因为即使是原生大写的成本......)
答案 1 :(得分:3)
您可以使用every
方法以更“实用的方式”执行此操作,这样我们就可以打破循环而不是foreach
。
每个方法对数组中存在的每个元素执行一次提供的回调函数,直到找到一个回调返回伪值的值(转换为布尔值时变为false的值)。如果找到这样的元素,则every方法立即返回false。否则,如果回调为所有元素返回了一个true值,则每个元素都将返回true。仅为已分配值的数组的索引调用回调;对于已删除或从未分配过值的索引,不会调用它。
所以:
function check(){
//Get value input and transform it into array
var value = document.querySelector('#username').value.split('');
var alpha = "-abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//If there is an error, stop the loop and return result
return value.every(function(elm){
//check if elm is an alpha string
return alpha.indexOf(elm) > -1;
});
}
答案 2 :(得分:2)
最简单的(至少要理解)解决方案(不使用正则表达式)将逐个字符循环遍历字符串,并针对允许的字符列表检查.indexOf
,例如:
for (var i = 0; i < input.length; i++) {
if (alpha.indexOf(input[i])==-1) {
console.log("ERROR");
break;
}
}
答案 3 :(得分:0)
编辑:我读错了这个问题并认为如果有一封信,你想要回复。现在,它将确保每个字符都在A
和z
的ASCII值范围内。
text = "ABCDEFzzxasd1";
valid = true;
for( i = 0; i < text.length; i++ ) {
if ( text.charCodeAt(i) < 65 || text.charCodeAt(i) > 122 ) {
alert("Woah, that's not a letter!");
valid = false;
break;
}
}
&#13;
答案 4 :(得分:0)
从
开始var alpha = "-abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ".split('');
function duplicates( element, index, array ){
return array.indexOf(element) == index;
}
function isNameFormatCorrect( userName ){
return ( alpha.concat(username.split(''))
.filter( duplicates ).length === alpha.length );
}
然后
var username = "YourUserNameHere-"
isNameFormatCorrect( username ); => true;
var username = "YourUserNameHere-**"
isNameFormatCorrect( username ); => false;