我正在写一个正则表达式以与JavaScript一起使用。测试时,我遇到了一些奇怪的行为,并将其归结为以下内容:
/^[a-z]/.test("abc"); // <-- returns true as expected
/^[a-z]/.test(null); // <-- returns true, but why?
我以为最后一种情况将返回
false
,因为它不符合正则表达式(该值为null,因此不要以该范围内的字符开头)。那么,谁能解释我为什么不是这种情况?如果我在C#中执行相同的测试:
var regex = new Regex("^[a-z]");
var res = regex.IsMatch(null); // <-- ArgumentNullException
...我得到了一个有意义的
ArgumentNullException
。因此,我猜想在JavaScript中测试正则表达式时,必须手动进行null
检查吗?我试图寻找一种解释,但没有任何运气。
最佳答案
这是因为test
会转换其参数:null
会转换为"null"
字符串。
您可以在控制台中进行检查:
/^null$/.test(null)
返回
true
。在ECMAScript specification中指定了对
ToString(argument)
的调用(另请参见ToString)。关于JavaScript正则表达式-null参数使正则表达式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27359464/