2013-10-22 2 views
1

주문 완료를 위해 전화 번호의 유효성을 검사하는 자바 스크립트 코드가 있습니다.Javascript 전화 확인 기능이 IE8에서 작동하지 않습니다.

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(); 
} 

코드는 파이어 폭스와 크롬에서 잘 작동하지만 IE8에서 항상 문자열 (10) 사이 아니라고 말하는 오류 메시지를 반환 체크 아웃 버튼에 대한 코드입니다 및 16 자.

무엇이 원인 일 수 있습니까?

답변

2

코드는 : trimPhone.split(/\d/).length - 1

솔직히, 그 문자가 문자열에 얼마나 많은 자리 알아낼 정말 끔찍한 방법! 이보다 훨씬 좋은 다른 방법이 많이 있습니다.

그러나 좀더 구체적으로 말하자면, IE8의 regex 엔진에서 버그가 발생한다는 것입니다.

이것은 꽤 잘 알려진 버그입니다. .split()을 사용하고 결과에 연속적인 일치 항목이없는 경우 IE8 이하 버전은 결과 배열에서 빈 요소를 버립니다.

그것은 더 일반적으로 빈 값을 CSV의 콘텐츠를 구문 분석하려고에 의해 촉발 것 - 다른 브라우저는 또한 당신에게 사이의 빈 요소를 제공하는 반면 예를 들어 split(',','x,y,,z'), 당신에게 IE8의 세 가지 요소 (x, yz)와 그 결과를 줄 것이다 yz.

CSV 구문 분석의 경우 문제 해결이 어려울 수 있지만이 방법을 사용할 필요가 없으므로 사례가 훨씬 쉽습니다.

그래서 여기의 해결책은이 방법을 사용하여 숫자를 계산하지 않는 것입니다.

난 당신이 시도 할 수있는 대안으로이 제안 : 대답에 대한

var phoneNumber = trimPhone.replace(/[^\d]/g,'').length; 
+0

감사하지만 작동하지 않았다, 실제로는 오류 메시지가 모든 브라우저 –

+0

난 당신이 지금 제거해야 할 수 있습니다 생각에 보이게 끝에 "- 1". 나는 10 자리 숫자로 그것을 시도했고 그것은 9를 주었다. – Katana314

+0

@ Katana314 : 정말로 그렇다. Heh, 멋진 사본 + 붙여 넣기 오류가 있습니다. 그것을 제거했습니다. – Spudley

관련 문제