1

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

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

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

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

4

3 回答 3

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(['', '', '', '', ''])
",,,,"
于 2013-11-11T12:26:12.023 回答
1

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

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

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

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

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

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

于 2013-11-11T12:40:34.073 回答
1

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

var re = /^\d+$/;

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

// dunno if you have to parseInt() first, haven't tested it
if(!isNaN(document.getElementById("id").value)){
    // do stuff
}
于 2013-11-11T12:34:25.840 回答