我正在写一个正则表达式以与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/

10-09 16:07
查看更多