JavaScript null 参数使正则表达式匹配
JavaScript null argument makes the regex match
我正在编写一个用于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
。
对 ToString(argument)
的调用在 ECMAScript 规范中指定(另请参阅 ToString)。
在这里,null
被类型转换为String
"null"
的形式。
"null"
与您提供的正则表达式匹配,这就是为什么它评估为true
在Javascript中,所有内容(或大部分)都是具有ToString
方法的Object
,如果需要类型转换,该方法将在内部自动调用。
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式matchget-error无法读取属性“”;0”;从null
- JavaScript null 参数使正则表达式匹配
- 与正则表达式一起使用时无法读取属性长度 null 错误
- 长度正则表达式在null上测试为true
- 在Phantom.js中捕获返回null的正则表达式
- 在Node.JS中从Javascript正则表达式返回NULL
- Javascript正则表达式分割拒绝null
- .match()对于密码的正则表达式返回null
- 为什么这个正则表达式总是返回null ?
- 正则表达式返回null