Javascript split() 正则表达式在 Chrome 中返回不需要的逗号
Posted
技术标签:
【中文标题】Javascript split() 正则表达式在 Chrome 中返回不需要的逗号【英文标题】:Javascript split() Regex expression returns unwanted comma in Chrome 【发布时间】:2013-11-11 12:24:08 【问题描述】:我写了一个简单的正则表达式来确定文本框是否只填充数字。
document.getElementById("id").value.split(/\d/).length;
如果这一行的结果等于 0,则语句为真,但似乎 value.split(/\d/)
在我 alert()
时返回一个逗号,所以长度为 1(alert()
仅返回我将它用于 @ 时写入的内容987654325@)
这在 ie 中完美无缺,但在 chrome 中我得到一个逗号。为什么会发生这种情况,我的正则表达式不正确吗?我也尝试了/^\d+$/
,但得到了相同的结果。
【问题讨论】:
你用的是哪个版本的IE? 现在是 10.0.92,我猜是最新的。 【参考方案1】:使用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(['', '', '', '', ''])
",,,,"
【讨论】:
确实test
更好,但 OP 可能正试图弄清楚为什么他/她的代码在 Chrome 和 IE 中的行为不同。
做到了!感谢@falsetru,现在代码在两种浏览器中都可以使用。仍然想知道如果输入有 4 个元素,为什么它会返回第 5 项?我刚刚通过 Chrome 调试器检查了它,是的,它返回 n+1 的数组?
@SercanAltundaş, IE 10, 9, 8, 7 也为我返回 n+1 个项目数组。想想'A8B'.split(/\d/)
:它返回['A', 'B']
。和'8'.split(/\d/)
返回['', '']
。 (第一个空字符串在数字之前,第二个空字符串在数字之后)。【参考方案2】:
一种选择是使用像这样的正则表达式:
var re = /^\d+$/;
或者简单地否定isNaN()
以在号码检查中得到真或假:
// dunno if you have to parseInt() first, haven't tested it
if(!isNaN(document.getElementById("id").value))
// do stuff
【讨论】:
【参考方案3】:发生这种情况的原因是,如果你拆分一个空字符串,你仍然会得到一个空字符串。
"".split("abc") // returns [""]
所以数组只有一个元素。这是正确的行为。
当您使用原始字符串中未包含的字符串拆分不同的字符串时,会发生相同的行为:
"dsfsf".split("123") // returns ["dsfsf"]
这在 IE 上“工作”的原因是因为该浏览器中的实现实际上是错误的,因为该函数应该始终返回 n+1 个元素(即至少是原始字符串)。
【讨论】:
以上是关于Javascript split() 正则表达式在 Chrome 中返回不需要的逗号的主要内容,如果未能解决你的问题,请参考以下文章