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

时间:2013-11-11 12:24:08

标签: javascript regex google-chrome comma

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

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

如果此行的结果等于0,则语句为真,但似乎value.split(/\d/)alert()时返回逗号,因此长度为1(alert()仅返回写入的内容当我将它用于value

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

3 个答案:

答案 0 :(得分:3)

使用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(['', '', '', '', ''])
",,,,"

答案 1 :(得分:1)

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

var re = /^\d+$/;

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

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

答案 2 :(得分:1)

之所以发生这种情况,是因为如果你拆分一个空字符串,你仍会得到一个空字符串。

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

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

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

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

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