我有javascript代码验证完成订单的电话号码。
function validatePhoneNumber(phone) {
var trimPhone = phone.replace(new RegExp(" ","g"),'');
var phoneNumber = trimPhone.split(/\d/).length - 1 ;
return phoneNumber >= 10 && phoneNumber <= 16 && phoneNumber === trimPhone.length ;
}
这是结帐按钮的代码
if(!validatePhoneNumber($('#phone').val())){
$('#phone').css("color", "#ff0000");
$('#invalidNumberFormat').show();
submit = false;
}
else{
$('#invalidNumberFormat').hide();
}
代码在Firefox和Chrome中运行良好,但在IE8中,它始终返回错误消息,指出字符串不在10到16个字符之间。
可能是什么原因?
答案 0 :(得分:2)
您的代码:trimPhone.split(/\d/).length - 1
坦率地说,这是一个非常可怕的方法来找出一个字符串中有多少个数字字符!还有很多其他方法比这更好。
然而,更具体地说,这里的问题是你在IE8的正则表达式引擎中遇到了一个错误。
这是一个众所周知的错误:使用.split()
时,结果包含连续匹配,IE8和更早版本将从结果数组中删除空元素。
尝试使用空值解析CSV内容时更常见 - 例如split(',','x,y,,z')
将为您提供包含三个元素(x
,y
和z
的结果)在IE8中,而其他浏览器也会在y
和z
之间为您提供空元素。
对于CSV解析,修复问题有时很难,但是你的情况要容易得多,因为你真的不需要使用这种方法。
因此,本例中的解决方案是不使用此方法来计算数字。
我建议您尝试这样做:
var phoneNumber = trimPhone.replace(/[^\d]/g,'').length;