更容易的方法使RegExp.test()对于空值返回false?

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

那么基于这个链接,它是Ecmascript中的一个错误 - /S/.test(null)是否返回true?,它看起来像空值被强制为一个字符串'null'。 WTF? 这是为什么这样设计的? 我也找不到有关此行为的任何文档。 有没有办法返回false的空/未定义的值(没有检查“空”硬编码等)?


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

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

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

regex.test(var || '')

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


您可以覆盖测试方法。

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
链接地址: http://www.djcxy.com/p/94981.html

上一篇: Easier way to have RegExp.test() return false for null values?

下一篇: Can Ramda have isString?