更简单的方法是让RegExp.test()对空值返回false

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

本文关键字:空值 返回 false test 方法 RegExp 更简单      更新时间:2023-09-26
let regex = /[a-z]+/;
regex.test('a'); // true
regex.test(''); // false
regex.test(null); // true
regex.test(undefined); // true

所以基于这个链接,它是一个bug在Ecmascript -/'S/.test(null)返回真吗?,看起来null值被强制为字符串'null'。WTF ?到底为什么要这样设计?我也找不到任何关于这种行为的文档。是否有一种方法返回false为null/未定义的值(没有硬编码检查'null'等)?

如果您正在测试一个变量,您可以这样做:

regex.test(var || '')

,以便在未设置时默认为空字符串。

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

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

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

Follow检查变量是否为字符串以检查参数是否为字符串:

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

您可以重写测试方法。

old = regex.test
regex.test = function(str){
    str = str? str: "";
    return old.call(this, str);
}
regex.test(null);  // false

获得预期输出的一种方法是首先检查值,并在nullundefined的情况下将其替换为""空字符串

let regex = /[a-z]+/;
function test (inp){
    return regex.test(inp? inp: '');
}
test(null); // false
test(undefined); // false