我写了一个简单的正则表达式来确定文本框是否只填充数字。
document.getElementById("id").value.split(/\d/).length;
如果此行的结果等于0,则语句为真,但似乎value.split(/\d/)
在alert()
时返回逗号,因此长度为1(alert()
仅返回写入的内容当我将它用于value
)
这在ie中完美无缺,但在chrome中我得到一个逗号。为什么会发生这种情况,我的正则表达式是不正确的?我也试过了/^\d+$/
但得到了相同的结果。
答案 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个元素(即至少是原始字符串)。