我有下一个功能:
var checkNameLenght = function(name,nameLenght,allowedLenght,defaultName) {
if((nameLenght <= allowedLenght) && !(/\s[^a-z]/i.test(name))) {
return name;
}
else {
if(opts.debug == true) {
console.log(name+' is to long or contains special characters / numbers | Please choose a name shorter than '+allowedLenght+' characters or remove any character / number');
}
return defaultName;
}
}
它的作用是检查某个字符串是否大于或小于允许的长度,并且还检查该字符串是否包含任何特殊字符或数字(空格除外),如果确认以上任何一项,则返回一个默认字符串,如果不是字符串。
但是这个函数同时检查长度和正则表达式,if((nameLenght <= allowedLenght) && !(/\s[^a-z]/i.test(name))) { ... }
,但我不希望这样,我希望它首先检查长度,然后检查正则表达式。
我尝试过这样的:
var checkNameLenght = function(name,nameLenght,allowedLenght,defaultName) {
if(nameLenght <= allowedLenght) {
return name;
}
else if( !(/\s[^a-z]/i.test(name)) ){
return name;
}
else {
if(opts.debug == true) {
console.log(name+' is to long or contains special characters / numbers | Please choose a name shorter than '+allowedLenght+' characters or remove any character / number');
}
return defaultName;
}
}
但它不能像第一个版本一样工作。我对第二个函数做错了什么?
最佳答案
But it doesn't work as the first version
好吧,不,你改变了逻辑。您没有说第二个版本的工作方式到底出了什么问题(或者它是否给您带来了错误?),所以很难确切地说出了什么问题。但我会猜测一下。
在第二个版本中,您首先检查长度,如果该测试通过,您将立即返回name
,而不进行任何进一步的测试。如果您也需要测试正则表达式,则可以使用第一个版本中的 &&
语法,或者将第二个测试嵌套在第一个 if block 内。
it also checks if the string contains any special characters or numbers ( except white space ) and if any of the above is confirmed it returns a default string, if not the string.
实际上,这不是您的正则表达式所做的。这是你的:
!(/\s[^a-z]/i.test(name))
该正则表达式正在测试 name
是否包含空格字符,后跟任何非字母字符,然后其结果应用了 not !
。因此,如果您的字符串包含不立即跟在空格后面的非字母字符,则不会找到它们。如果您的目标是测试字符串中任意位置的非字母 A-Z 或空格的任何字符,请尝试以下操作:
!(/[^a-z\s]/i.test(name))
或者不寻找无效字符,只需测试整个字符串是否由有效字符组成:
/^[a-z\s]*$/i.test(name) // note: you don't need the ! for this
// ^ - match beginning of string
// [a-z\s]* - match zero or more alphabet or white space characters
// $ - match end of string
此外,您不需要 nameLenght
参数,因为字符串具有内置的 length 属性:您可以使用相同的 name.length
。 (显然,这不会停止该功能的工作,但它有点不整洁。)
(此外,您还拼错了“length”,但您似乎在每个变量名称中都这样做了,因此它不会造成问题。但是。)
编辑:根据您的评论工作的新版本:
var checkName = function(name, allowedLength, defaultName) {
if(name.length > allowedLength) {
console.log("Name is more than allowed length");
return defaultName;
}
if( /[^a-z\s]/i.test(name) ){
console.log("Name contains special characters or numbers");
return defaultName;
}
// tests passed
return name;
};
注意:您不需要任何 else
语句,因为每个 if
都会从函数中返回。显然,您可以删除我放入的 console.log()
语句,也可以像原来那样添加 if(opt.debug)
语句。
关于javascript - 改进 JavaScript 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869418/