2014-04-30 9 views
3

사람이 숫자 이외의 값을 입력하는 것을 방지하려는 숫자 형식 입력이 있습니다. 예제는 입력 유형 텍스트 필드에서 잘 작동하지만 숫자 필드에서는 제대로 작동하지 않습니다.정규식이 숫자 형식 입력에서 바꿉니다.

가 잘 작동합니다 :)

<input type="text" onkeyup="this.value=this.value.replace(/[^\d]/,'')"> 

잘 작동하지 않습니다 :(

<input type="number" onkeyup="this.value=this.value.replace(/[^\d]/,'')"> 

... JSFiddle

도와주세요에 자신을 위해보십시오

+0

그것은 절대적으로'유형 = "숫자"'를해야합니까? 여기서 문제는 숫자 필드가 자연스럽게 다르게 작동한다는 것입니다. –

+1

또한 정말로 "잘 작동합니까"? 예를 들어, 누군가가 상자에 텍스트를 붙여 넣으면, 그걸 잡을 수있는 onkeyup 이벤트가 없습니다. –

+0

@Vasili SyrakisWell, 주된 이유는 그것이 휴대폰보다는 잘 작동하는 것입니다 - 숫자 키패드를 전체 키보드. –

답변

1

방금 ​​JSFiddle을 사용하여 간단한 테스트를했는데 <input type="number" /> 요소에 잘못된 입력이있는 경우 this.value 속성이 비어있게 나타납니다. 지정된 경우

값 속성을 : 사실

<input type="number" oninput="alert(this.value)"> 

JSFiddle Demo


여기에 이런 일이 발생하는 이유는 다음과 같습니다 크롬을 사용하는 경우

다음 줄이 결과를 보여 주었다 비어 있지 않은 유효한 값은 유효한 부동 소수점 숫자 인 값 이어야합니다.

값 소거 알고리즘은 다음과 같습니다. 요소의 값이 유효한 부동 소수점 숫자가 아닌 경우 빈 문자열로 설정하십시오. HTML5 Draft Paper section on the implementation of the number input type


이 문제에서

^지금 내 관심을 촬영하고 좀 해결 방법을 마련했습니다.

<input type="number" oninput="updateNum(this)"> 
function updateNum(e) 
{ 
    e.select(); 
    e.value = getSelection().toString().replace(/[^\d]/g,''); 
} 

이것은 선택 여기서 명령 사이 변경할 경우 버가 될 가능성이있다. 당신이 (예 : 3.14) 소수 부분에 번호를받을 것인지

JSFiddle for the workaround

+0

예, 있습니다. Firefox에서 값을 반환하지만 Chrome이나 IE에서는 반환하지 않는 것으로 나타났습니다. 그래서 그것은 Firefox에서 작동합니다 - 이것은 버그입니까? –

+0

@JasperJohns 그래, Bugzilla에서 버그 티켓을 찾았습니다. https://bugzilla.mozilla.org/show_bug.cgi?id=765772 – AeroX

+0

@JasperJohns 가능한 해결 방법을 추가했습니다 – AeroX

0

DEMO를 참조

Number: <input type="number" oninput="updateNum(this)" /> 

function updateNum(e) { 
if (isNaN(e.value)) { 
    e.value = e.value.replace(/[^\d]/g,''); 
} 
관련 문제