我试图创建一个很好的util函数来验证字符串。条件是:
typeof "undefined"
null
''
的字符串将无效。我发现了一些关于这一点的建议,建议使用RegEx
是这样做的,但是当我给它一个数值时,以下内容不起作用。
这是我到目前为止所拥有的:
const isValidString = (str1) => {
if(typeof str1 === "undefined" || str1 === null) return false;
const validRegEx = /^[^\\\/&]*$/;
if(str1.match(validRegEx)) {
return true;
} else {
return false;
}
}
正如我所说,如果将const str1 = 3;
发送给此函数,我会收到一条错误:
" TypeError:badString.match不是函数
我错过了什么?
答案 0 :(得分:2)
if (str1 != null)
会强制str1
值,并会同时针对null
和undefined
进行检查。
编辑:忽略此部分(另外,您不需要使用正则表达式来检查是否至少有一个字符。您可以使用字符串length
。str1.length
将评估为{ {1}} y值如果为0,否则它将评估为false
您的值。)您需要一个严格的true
值,因此它应该是boolean
。
str1.length > 0
答案 1 :(得分:1)
为什么不添加typeof str1 === 'string'
,如下所示
if(typeof str1 === 'string' && str1.match(validRegEx)) {
return true;
} else {
return false;
}
答案 2 :(得分:0)
这是因为匹配方法仅适用于字符串,并且您尝试在数字上调用它。
我建议重新编写函数以确保参数是一个字符串,而不是只检查null或未定义的值:
const isValidString = str1 => {
if (!str1 || typeof str1 !== 'string') return false
const validRegEx = /^[^\\\/&]*$/
if (str1.match(validRegEx)) {
return true
} else {
return false
}
}
答案 3 :(得分:0)
将数字转换为字符串执行评估
const isValidString = (str1) => {
str1 = str1.toString();
if(typeof str1 === "undefined" || str1 === null) return false;
const validRegEx = /^[^\\\/&]*$/;
if(str1.match(validRegEx)) {
return true;
} else {
return false;
}
}
console.log(isValidString(3))

答案 4 :(得分:0)
将if替换为以下内容:
if(typeof str1 === "undefined" || str1 === null || typeof str1 !== 'string') return false;
答案 5 :(得分:0)
请改用RegExp#test
,因为您的正则表达式始终可用。此外,String#match
返回一个不太适合布尔表达式的数组(或null
),可能会产生不需要的结果。
const isValidString = (str1) => {
if (typeof str1 === "undefined" || str1 === null) return false;
const validRegEx = /^[^\\\/&]*$/;
if (validRegEx.test(str1)) {
return true;
} else {
return false;
}
}
console.log(isValidString(1));
console.log(isValidString('string'));

注意,您的正则表达式仍然是错误的,因为它将数字验证为true
。你需要进一步调整它。
答案 6 :(得分:0)
在这一点上归功于djfdev,我真正做的就是简化他的答案,使其更加简洁。
const isValidString = str1 => {
return typeof str1 === 'string' && /^[^\\\/&]*$/.test(str1);
}