让RegExp.test()为null值返回false的更简单方法?

时间:2016-06-23 20:41:18

标签: javascript

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'等)?

3 个答案:

答案 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