"숫자"유형의 html 입력이 필드에 문자 'e'를 입력 할 수있는 이유는 무엇입니까?


217

다음 html5 입력 요소가 있습니다.

<input type="number">

이 입력이 왜 문자 'e'를 입력 필드에 입력 할 수있게합니까? 다른 알파벳 문자를 입력 할 수 없습니다 (예상대로)

크롬 사용하기 44.0.2403.107

무슨 뜻인지 확인하려면 : http://www.w3schools.com/html/tryit.asp?filename=tryhtml_input_number


3
또한 .일부 브라우저에서 +,-및 여러 번 입력 할 수도 있습니다 .
nu everest

답변:


217

그것이 정확히 스펙 이 작동한다고 말하는 방식이기 때문 입니다. 숫자 입력은 음수 기호 및 또는 문자를 포함하여 부동 소수점 숫자를 사용할 수 있습니다 (여기서 지수는 또는 뒤에있는 숫자 임).eEeE

부동 소수점 숫자는 정확히 다음 순서로 다음과 같은 부분으로 구성됩니다.

  1. 선택적으로, 첫 번째 문자는 " -"문자 일 수 있습니다 .
  2. " 0—9" 범위에있는 하나 이상의 문자
  3. 선택적으로 다음 부분은 정확히 다음 순서로 수행됩니다.
    1. " ."문자
    2. " 0—9" 범위에있는 하나 이상의 문자
  4. 선택적으로 다음 부분은 정확히 다음 순서로 수행됩니다.
    1. " e"문자 또는 " E"문자
    2. 선택적으로 " -"문자 또는 " +"문자
    3. " 0—9" 범위에있는 하나 이상의 문자

2
아 고마워 나는 틀린 스펙
Gnarlywhale 17:07에

4
나는 아직도 이것에 의해 당황하고 있습니다. 우선 나는 수학자가 아니므로 숫자의 맥락에서 "e"는 무엇을 의미합니까? 둘째, 숫자가 있고 문자가 허용 되더라도 input.value가 "e"를 쓰 자마자 빈 문자열 인 이유를 알 수 없습니다.
Simon

9
@Simon을 사용하면 e입력하는 데 지루한 많은 수의 숫자를 압축하는 데 유용합니다. 사소한 예로서2e2 = 2*10^2 = 200
Gnarlywhale

3
@Simon "e를 쓰 자마자" 예, "4e"는 숫자가 아니며, 예를 들어 "4e + 0"은 유효한 숫자입니다 (4). 부분 사용자 입력으로 작동하는 "실시간"클라이언트 측 자바 스크립트 코드가있는 경우 사용자에게 입력 편집을 마치고 전체 가치를 제공하고 편집에 절반의 영향을주지 않도록 시간을 주어야합니다. "4e + 0"입력에서 "undefined"가있는 경우 "to to number"구문 분석기를 수정하십시오. 질문의 예제가 제대로 작동하고 "4e + 1"이 오류로보고되고 "4e + 0"이 "4e + 0"(예 : 1과 5 사이의 숫자)으로 올바르게 반환됩니다.
Ped7g

4
@Anthony No e는 지수를 의미합니다.
Scott Marcus

62

아래와 같이 간단하게 만들 수 있습니다

<input type="number"  onkeydown="javascript: return event.keyCode == 69 ? false : true" />

업데이트 된 답변

@ 88 MPG가 제안한대로 더욱 간단하게 만들 수 있습니다

<input type="number" onkeydown="return event.keyCode !== 69" />


17
return event.keyCode !== 69불필요한 삼항 연산자를 피하기 때문에 사용 하는 것이 좋습니다. 또한 인라인을 권장하지 않습니다.
Adam Fratino

5
이것은 복사-붙여 넣기 e또는 E현장에서 방지 할 수는 없습니다
molamk

18

"e"는 숫자 기호 인 지수를 나타내므로 HTML 입력 숫자 유형은 "e / E"를 허용합니다.

예 200000은 2e5로 쓸 수도 있습니다. 이것이 질문에 감사하는 데 도움이되기를 바랍니다.          


15

숫자로만 구성된 숫자를 사용 하는 가장 좋은 방법 은 다음과 같습니다.

<input type="number" onkeydown="javascript: return event.keyCode === 8 ||
event.keyCode === 46 ? true : !isNaN(Number(event.key))" />

이것은 'e', ​​'-', '+', '.'를 피합니다. ... 숫자가 아닌 모든 문자!

숫자 키만 허용하려면 :

isNaN (번호 (event.key))

"백 스페이스"(키 코드 : 8) 및 "삭제"(키 코드 : 46)는 허용합니다 ...


11
<input type="number" onkeydown="return FilterInput(event)" onpaste="handlePaste(event)"  >

function FilterInput(event) {
    var keyCode = ('which' in event) ? event.which : event.keyCode;

    isNotWanted = (keyCode == 69 || keyCode == 101);
    return !isNotWanted;
};
function handlePaste (e) {
    var clipboardData, pastedData;

    // Get pasted data via clipboard API
    clipboardData = e.clipboardData || window.clipboardData;
    pastedData = clipboardData.getData('Text').toUpperCase();

    if(pastedData.indexOf('E')>-1) {
        //alert('found an E');
        e.stopPropagation();
        e.preventDefault();
    }
};

2
이것이 복사 및 붙여 넣기 기능으로 'E'문자를 삽입하지 못하게 할 것이라고 얼마나 확신하십니까?
StephenKelzer

1
방금 확인했지만 정확하고 복사하여 붙여 넣은 입력에서는 작동하지 않습니다.
Gnarlywhale

당신은 올바른 @StephenKelzer입니다. 처리 할 코드를 추가했습니다.
TruthSeeker

4

문자 e와 빼기 기호를 모두 숨기려면 -다음을 수행하십시오.

onkeydown="return event.keyCode !== 69 && event.keyCode !== 189"

3

각도를 사용하여 e, +,-, E를 입력하도록 제한 할 수 있습니다.

 <input type="number"  (keypress)="numericOnly($event)"/>


  numericOnly(event): boolean { // restrict e,+,-,E characters in  input type number
    debugger
    const charCode = (event.which) ? event.which : event.keyCode;
    if (charCode == 101 || charCode == 69 || charCode == 45 || charCode == 43) {
      return false;
    }
    return true;

  }

2
이것은 사용자가 그 문자를 입력하는 것을 제한합니다 ??
Amy

1
도움을 주셔서 감사합니다. 각도에서 동일한 솔루션을 찾고 있었지만 이제는 어떻게해야하는지
Amy

모범 사례 인 지시문을 만들 수 있습니다. 또한 구성 요소의 .ts 파일에서 직접 할 수도 있습니다!
rinku Choudhary

0

모난; 더 이상 사용되지 않는 IDE 키 코드가있는 경고

기능적으로 rinku의 답변과 동일하지만 IDE 경고 방지

numericOnly(event): boolean {
    // noinspection JSDeprecatedSymbols
    const charCode = (event.which) ? event.which : event.key || event.keyCode;  // keyCode is deprecated but needed for some browsers
    return !(charCode === 101 || charCode === 69 || charCode === 45 || charCode === 43);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.