2012-04-17 4 views
1

나는 숫자 데이터 만 유효성을 검사해야하는 텍스트 상자 (가격)가 있습니다. 또한 나는 0과 같은 앞자리 숫자 (예 : 01)를 허용 할 수 없습니다. 그래서 replace 메소드를 정규식으로 사용했습니다. 선행 제로를 교체jquery 바꾸기 함수가 IE에서 이상하게 작동합니다

$("#txtPrice").keyup(function(){ 
    var text=$(this).val(); 
    $(this).val(text.replace(/[^\d\s\.]/,"")); 
}); 

, 나는

$("#txtPrice").keyup(function(){ 
    var text=$(this).val(); 
    $(this).val(text.replace(/^0+/, '')); 
}); 

그것은 파이어 폭스에서 잘 작동을 사용하지만, IE에서 이상하게 동작 : 대체 문자를 들어이 사용되었다.

숫자 앞에 새 숫자를 추가하면 새 숫자가 번호 끝에 추가됩니다. 예를 들어, "56"을 "156"으로 편집하면 "561"을 형성하는 끝에 숫자 1이 추가됩니다. 임의의 숫자가 앞에 놓 이도록 시도되면 실제로 텍스트 필드의 끝에 추가됩니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

이것은 정규식 대체가 아닌 다른 줄에서 문제가 될 가능성이 큽니다. "경고 (텍스트);를 입력하면 어떻게됩니까? 그 두 줄 사이에? – pms1969

+0

나는 주어진 인스턴스에 하나의 keyup 함수 만 바인딩하는 것이 이상적이라고 생각한다. 아마도 당신이 찾고있는 행동을 얻기위한 해결책은 아니지만, 더 쉽게 진행되고있는 것을 파악하게 될 것입니다. – veeTrain

+0

안녕하세요. 내 답변이 당신을위한 효과적인 해결책 이었으면, 답변으로 받아들이거나 귀하의 상황에 맞지 않는 이유를 알려주십시오. 감사합니다 – veeTrain

답변

0

당신이 겪고있는 것이 당신이 입력을 시작할 때 1 개를 배치하고 IE가 끝까지 두드리는 것이 아니라는 것을 믿습니다. 그러나 IE는 커서가 실제로 커서의 앞쪽으로 이동하는 것을 허용하지 않습니다. 입력. 화살표/홈 키 작업을 캡처하고 키 업을 트리거하고, 두 개의 정규 표현식을 수행하고, 텍스트를 대체합니다.

아마 당신이해야 할 일은 키가 발견 된 것을 평가하고 실제 캐릭터와 일치하는 경우 그 키로 무언가를하는 것만을 귀찮게하는 것입니다.

무언가 like this이 귀하의 상황을 해결합니까?

$("#txtPrice").keyup(function(event) { 
    // avoid triggering on control characters; FF ignores but IE will execute and possibly confuse 
    if (event.which > 40) { 
     var text = $(this).val(); 
     $(this).val(text.replace(/^0+/, '')); 
     $(this).val(text.replace(/[^\d\s\.]/,"")); 
    } 
}); 

당신은 아마 event.which > 40 몇 가지 예외를 확인해야합니다 그리고 당신이 그들은 단지 키를 누를 경우 사용자의 커서가있을 수 있습니다 얼마나 전혀 모르겠지만, 나는이 충분한 해결책이 될 것 같아요 너를 위해서.

편집 : 정규식을 하나로 결합했습니다. 업데이트 된 내용은 jsfiddle입니다.

$(this).val(text.replace(/(^0+|[^\d\s\.])/, "")); 

편집 : 당신은 가능한 한 적은 커서 '주위 점프'를 가지고 싶다면 당신은 이미 텍스트가 일치하는지 확인한 경우에, 당신은 선택적으로 불법 텍스트를 대체 할 수있다. Here is a demonstration.

if ($(this).val().match(/(^0+|[^\d\s\.])/)) { 
    $(this).val(text.replace(/(^0+|[^\d\s\.])/, "")); 
} 

바이올린에서 수행 한 것처럼 정규 표현식을 변수로 추정 할 수도 있습니다.

+0

안녕, 내 문제를 해결. 그러나 삽입 후 커서가 뒤쪽으로갑니다. – iijb

+0

위대한 @iijb; 당신은 원래의 문제에 대한 대답으로 이것을 받아 들여야하고, 다른 옵션을 탐색 한 후에 새로운 문제 티켓을 열어야합니다. [여기는 jsfiddle입니다] (http://jsfiddle.net/tU7vh/5/) 커서가 움직이는 곳은 '불법적 인'일을했을 때입니다. – veeTrain

관련 문제