Javascript split() Regex 表达式在 Chrome 中返回不需要的逗号

Javascript split() Regex expression returns unwanted comma in Chrome

本文关键字:返回 不需要 Chrome split Regex 表达式 Javascript      更新时间:2023-09-26

我写了一个简单的正则表达式来确定文本框是否只填充数字。

document.getElementById("id").value.split(/'d/).length;

如果这一行的结果等于 0,那么语句是正确的,但似乎value.split(/'d/)在我alert()它时返回一个逗号,所以长度为 1(alert()只返回我使用它时写的内容value

这在 ie 中完美无缺,但在 chrome 中我得到一个逗号。为什么会发生这种情况,我的正则表达式不正确吗?我也尝试了/^'d+$/但得到了相同的结果。

使用RegExp.test方法更合适:

/^'d+$/.test(document.getElementById('id').value)

例如:

> /^'d+$/.test('1234')
true
> /^'d+$/.test('12,34')
false
> /^'d+$/.test('abcd')
false

.split(/'d/)返回 n+1 个项目的数组。(n = 包含的位数):

> '1234'.split(/'d/)
["", "", "", "", ""]
> '1234'.split(/'d/).length
5
> 'asdf'.split(/'d/)
["asdf"]
> 
'asdf'.split(/'d/).length
1

为什么你会得到,,,alert参数转换为字符串:

> String('1234'.split(/'d/)) // === String(['', '', '', '', ''])
",,,,"

一种选择是使用像这样的正则表达式:

var re = /^'d+$/;

或者简单地否定isNaN()以在数字检查上得到真或假:

// dunno if you have to parseInt() first, haven't tested it
if(!isNaN(document.getElementById("id").value)){
    // do stuff
}

发生这种情况的原因是,如果您拆分一个空字符串,您仍然会得到一个空字符串。

"".split("abc") // returns [""]

所以数组有一个元素。这是正确的行为。

当您使用原始字符串中不需要的字符串拆分不同的字符串时,也会发生相同的行为:

"dsfsf".split("123") // returns ["dsfsf"]

这在IE上"工作"的原因是该浏览器中的实现实际上是错误的,因为该函数应始终返回n + 1个元素(即至少原始字符串)。