let regex = /[a-z]+/;
regex.test('a'); // true
regex.test(''); // false
regex.test(null); // true
regex.test(undefined); // true
因此,基于此链接Is it a bug in Ecmascript - /\S/.test(null) returns true?,看起来空值被强制转换为字符串' null'。 WTF?为什么这样设计?我也无法找到有关此行为的任何文档。有没有办法让false
返回null / undefined值(没有硬编码检查' null'等)?
答案 0 :(得分:1)
RegExp.test()
的参数应该是一个字符串。如果不是,则将其转换为字符串:
var regex = /\[object Object\]/;
console.log(regex.test({})); // true

这是JavaScript中的标准行为。 E. g。 "null".replace(null, {}) === "[object Object]"
。
按照Check if a variable is a string检查参数是否为字符串:
if (typeof myVar === 'string' || myVar instanceof String) { ... }
else return false;
答案 1 :(得分:1)
如果您正在测试变量,则可以执行以下操作:
regex.test(var || '')
如果没有设置,它将默认为空字符串。
答案 2 :(得分:0)
您可以覆盖测试方法。
old = regex.test
regex.test = function(str){
str = str? str: "";
return old.call(this, str);
}
regex.test(null); // false
一种方法是让您的预期输出首先检查值,并在""
或null
undefined
空字符串
let regex = /[a-z]+/;
function test (inp){
return regex.test(inp? inp: '');
}
test(null); // false
test(undefined); // false