关于javascript:让RegExp.test()为空值返回false的更简单方法?

Easier way to have RegExp.test() return false for null values?

1
2
3
4
5
let regex = /[a-z]+/;
regex.test('a'); // true
regex.test(''); // false
regex.test(null); // true
regex.test(undefined); // true

所以基于这个链接,它是ecmascript-/s/.test(空)中的bug返回真的吗?,似乎将空值强制为字符串"null"。世界跆拳道联盟?这到底是怎么设计的?我也找不到关于这种行为的任何文档。是否有返回空/未定义值的false的方法(在检查"空"等时不进行硬编码)?


如果要测试变量,可以执行以下操作:

1
regex.test(var || '')

这样,如果没有设置,它将默认为空字符串。


RegExp.test()的参数应该是字符串。如果不是,则转换为字符串:

1
2
var regex = /\[object Object\]/;
console.log(regex.test({})); // true

这是JavaScript中的标准行为。如"null".replace(null, {}) ==="[object Object]"

如果变量是字符串,请执行以下操作以检查参数是否是字符串:

1
2
if (typeof myVar === 'string' || myVar instanceof String) { ... }
else return false;


您可以重写测试方法。

1
2
3
4
5
6
old = regex.test
regex.test = function(str){
    str = str? str:"";
    return old.call(this, str);
}
regex.test(null);  // false

一种方法是获得预期的输出,首先检查该值,如果是nullundefined,则将其替换为""空字符串。

1
2
3
4
5
6
7
let regex = /[a-z]+/;
function test (inp){
    return regex.test(inp? inp: '');
}

test(null); // false
test(undefined); // false