전화 : 텍스트 입력을위한 숫자 키보드


178

전화 번호 키보드를 강제로 켜는 방법이 <input type="text">있습니까? 방금 <input type="number">HTML5에서 "부동 소수점 숫자" 임을 알았 으므로 신용 카드 번호, 우편 번호 등에 적합하지 않습니다.

<input type="number">부동 소수점 숫자 이외의 숫자 값을 사용하는 입력에 대해의 숫자 키보드 기능을 에뮬레이션하고 싶습니다 . 아마도 다른 적절한 input유형이 있습니까?


우편 번호에는 아직 큰 답이 없습니다. 국제 우편 번호에 대해이 질문을 구체적으로 다시 요청했습니다. stackoverflow.com/questions/25425181/…
Ryan McGeary

: 나는이 ..sort 할 수있는 hackish 방법을 알아 냈어 stackoverflow.com/a/25599024/1922144
davidcondrey

2015 년 중반 현재, 이것을 수행하는 더 좋은 방법이 있습니다 : stackoverflow.com/a/31619311/806956
Aaron Gray

답변:


206

할 수 있습니다 <input type="text" pattern="\d*">. 숫자 키보드가 나타납니다.

자세한 내용은 여기를 참조하십시오 : iOS 용 텍스트, 웹 및 편집 프로그래밍 안내서

<form>
  <input type="text" pattern="\d*">
  <button type="submit">Submit</button>
</form>


23
숫자 키보드 만 원하지만 유효성 검사를 원하지 않는 경우 (예 : Chrome) 양식에 novalidate 속성을 넣을 수 있습니다. <form ... novalidate>
Brian

4
\d*작동하지 않으며 필요하다는 것을 알았습니다 [0-9]. 이 작업은 작동합니다 type='numeric'. 우편 번호에 대한 링크 된 문서 참조를 기반으로 제안됩니다.
Brett Ryan

11
숫자 값만 필요한 한 작동합니다. '.'이 필요한 부동 소수점 숫자 키보드에 이러한 문자가 포함되어 있지 않으므로 (또는 일부 지역의 경우 ',') 입력 할 수 없습니다.
DrHall

2
내가 사용해야하는 경우. (도트) 어떻게 사용하나요? 이 패턴은 [0-9] 만 표시합니다.

15
<input type = "text"pattern = "\ d *"> 안드로이드에서 작동하지 않습니까? 나는 iOS를 테스트하고 성공적으로 일했지만 안드로이드에서는 작동하지 않았다. 어떻게 해결할 수
있습니까?

158

2015 년 중반까지 이것이 최선의 해결책이라고 생각합니다.

<input type="number" pattern="[0-9]*" inputmode="numeric">

그러면 Android와 iOS 모두에서 숫자 키패드가 제공됩니다.

여기에 이미지 설명을 입력하십시오

또한 위 / 아래 화살표 버튼과 키보드 친화적 인 위 / 아래 화살표 키를 사용하여 예상되는 데스크탑 동작을 제공합니다.

여기에 이미지 설명을 입력하십시오

이 코드 스 니펫에서 사용해보십시오.

<form>
  <input type="number" pattern="[0-9]*" inputmode="numeric">
  <button type="submit">Submit</button>
</form>

둘을 결합하여 type="number"하고 pattern="[0-9]*, 우리는 모든 곳에서 작동하는 솔루션을 얻을. 또한 향후 HTML 5.1 제안 inputmode속성 과 호환됩니다 .

참고 : 패턴을 사용하면 브라우저의 기본 양식 유효성 검사가 트리거됩니다. novalidate속성을 사용하여이를 비활성화 하거나 title속성을 사용하여 유효성 검사 실패에 대한 오류 메시지를 사용자 정의 할 수 있습니다 .


국제 우편 번호와 같이 선행 0, 쉼표 또는 문자를 입력해야하는 경우이 약간의 변형을 확인하십시오 .


학점 및 추가 자료 :

http://www.smashingmagazine.com/2015/05/form-inputs-browser-support-issue/ http://danielfriesen.name/blog/2013/09/19/input-type-number-and-ios- 숫자 키패드 /


1
HTML5 type="number" 사양에 따르면 다음과 같은 내용 속성을 지정해서는 안되며 요소에 적용하면 안됩니다. ... inputmode
Tgr

2
@Tgr Ahh, 잘 잡았습니다. 이 사양은 사람들이 사용 <input type="text" inputmode="numeric">하기를 원하고 모바일 브라우저가 inputmode숫자 키패드 또는 풀 키보드를 표시하는지 확인 하기를 원합니다 . 브라우저가을 지원하지 않기 때문에 inputmode데스크톱과 모바일 브라우저에서 어떻게 구현되는지 확실하지 않습니다. 예 : 데스크탑 브라우저에서 문자 입력을 허용 <input type="text" inputmode="numeric">합니까? 그렇다면 문제입니다. <input type="number">이를 방지하고 숫자 만 허용합니다. 브라우저가 구현을 시작할 때까지 기다려야 할 수도 있습니다. 그러면이 답변을 업데이트 할 수 있습니다.
Aaron Gray

2
지원 type="number"입니다 괜찮은 하지만, 예를 들어 신용 카드 번호에 대한 많은 이해가되지 않습니다 스피너를 표시 할 수 있습니다.
Tgr

2
type = "number"를 갖는 것은 엉덩이 X에서 고통입니다. 입력이 유효하지 않으면 JS에서 입력 값을 얻을 수없고 커서 위치 등을 얻을 수 없습니다.
Nicu Surdu

2
This attribute applies when the value of the type attribute is text, search, tel, url, email, or password, otherwise it is ignored.
Michael Laffargue

61

적어도 "패스 코드"와 같은 필드의 <input type="tel" />경우 가장 확실한 숫자 지향 필드를 생성 하는 것과 같은 작업을 수행 하며 자동 서식없다는 이점도 있습니다. 예를 들어, 최근 힐튼을 위해 개발 한 모바일 응용 프로그램에서 다음과 같은 결과를 얻었습니다.

TEL 형식의 입력 태그가있는 iPhone 웹 응용 프로그램 디스플레이 형식이 자동으로 지정되지 않고 다소 직관적이지 않은 입력 구성을 갖는 형식 번호와 달리 매우 양호한 숫자 키보드를 생성하는 TEL 유형

... 내 고객은 매우 감동했습니다.

<form>
  <input type="tel" />
  <button type="submit">Submit</button>
</form>


4
나에게 문제는 자동 서식이 아니라 유효성 검사였습니다. 유형 number을 입력 하면 많은 브라우저에서 숫자에 대한 엄격한 규칙이 적용됩니다. 사용자가 공백 (또는 쉼표)을 추가하여 수천을 구분하면 입력에서 어떤 값도 얻지 못합니다. 예, JavaScript에서도 input.value비어 있습니다. 유형의 입력 tel은 특정 형식으로 제한되지 않으므로 사용자는 여전히 아무것도 입력 할 수 있으며 유효성 검사는 별도의 프로세스 (개발자가 처리)입니다.
Nux

이 키보드에서 십진수를 사용하는 방법
Anto

11

를 사용 type="email"하거나 type="url"당신에게 같은 아이폰과 같은 적어도 일부 휴대 전화에 키보드를 줄 것이다. 전화 번호의 경우을 사용할 수 있습니다 type="tel".


9

를 사용 <input type="text" pattern="\d*">하여 숫자 키보드를 표시 하면 위험 할 수 있습니다. 파이어 폭스와 크롬에서 패턴에 포함 된 정규 표현식은 브라우저가 해당 표현식에 대한 입력의 유효성을 검사하도록합니다. 패턴과 일치하지 않거나 비워두면 오류가 발생합니다. 다른 브라우저에서 의도하지 않은 동작에주의하십시오.


6
novalidate포함에 속성을 추가 form element하면 자동 유효성 검사 문제를 해결해야합니다. 직접 확인해야합니다.
Justus Romijn


4

type="number"시맨틱 웹 페이지에 가장 적합 하다고 생각 합니다. 키보드 만 변경하려면 type="number"또는 을 사용할 수 있습니다 type="tel". 두 경우 모두 iPhone은 사용자 입력을 제한하지 않습니다. 사용자는 원하는 문자를 입력하거나 붙여 넣을 수 있습니다. 유일한 변경 사항은 사용자에게 표시되는 키보드입니다. 이 이상의 제한을 원하면 JavaScript를 사용해야합니다.


8
내가 가진 문제는 type = "number"는 부동 소수점 숫자에만 사용해야한다는 것입니다. 신용 카드, 우편 번호 또는 다른 숫자 만 문자열이 아닙니다. 의미있는 인코딩 방식과 올바른 키보드 디스플레이가 모두 있기를 바랐습니다. 적절한 유형은 input type = "text"라고 생각하지만 잘못된 키보드가 표시됩니다. 자바 스크립트로 알려 주면 두 가지 문제를 모두 해결할 수 있습니다.
Tami

2
type="number"플로트입니다. type="text"문자열입니다. 정말로 원하는 것은 정수입니다. float은 문자열보다 정수에 가깝다고 생각합니다. 어떻게 생각해?
고양이 첸

6
(예를 들어) 공백으로 입력 한 신용 카드 번호 깰 것 - 유형의 조심 한가지 = "수"크롬 적어도 숫자로 입력을 강제하는 것입니다
존 카터

8
또한 같은 우편 코드를 설정합니다 @therefromhere 019201920.
ceejayoz

그 것 또한 엉망으로 사용자가 자신의 브라우저에서 다른 언어를 설정 한 경우 stackoverflow.com/questions/5345095/...
dalore

4

나에게 가장 좋은 해결책은 다음과 같습니다.

안드로이드와 아이폰에 0-9 패드를 띄우는 정수

<label for="ting">
<input id="ting" name="ting" type="number" pattern="[\d]*" />

파이어 폭스 / 크롬 / 사파리에서 스피너를 숨기려면이 작업을 원할 수도 있습니다. 대부분의 고객은 추악하다고 생각합니다.

 input[type=number]::-webkit-inner-spin-button,
 input[type=number]::-webkit-outer-spin-button {
      -webkit-appearance: none;
      margin: 0;
 }

 input[type=number] {
      -moz-appearance:textfield;
 }

사용자 정의 유효성 검사를 수행하는 경우 양식 요소에 novalidate = 'novalidate'를 추가하십시오.

Ps 당신이 실제로 부동 소수점 숫자를 원할 경우를 대비하여, 당신이 좋아하는 정밀도로 밟으면 '.' 안드로이드

<label for="ting">
<input id="ting" name="ting" type="number" pattern="[\d\.]*" step="0.01" />

1

2018 년 :

<input type="number" pattern="\d*">

Android 및 iOS 모두에서 작동합니다.

Android (^ 4.2) 및 iOS (11.3)에서 테스트했습니다.


0

다음과 같이 시도해보십시오.

<input type="number" name="input">
<input type="submit" value="Next" formnovalidate="formnovalidate">

그러나주의 사항 : 입력에 숫자 이외의 것이 포함되어 있으면 서버로 전송되지 않습니다.


0

모든 상황에서 나에게 가장 적합한 유형을 찾을 수 없습니다. 숫자 입력 (예 : "7.5"입력)을 기본값으로 설정해야하지만 특정 시간에는 텍스트 (예 : "pass")도 허용해야합니다. 사용자는 숫자 키패드 (예 : 7.5 입력)를 원했지만 가끔 텍스트를 입력해야했습니다 (예 : "통과").

오히려 내가 한 것은 양식에 확인란을 추가하고 사용자가 type = "number"와 type = "text"사이에서 내 입력 (id = "inputSresult")을 전환하도록 허용하는 것이 었습니다.

<input type="number" id="result"... >
<label><input id="cbAllowTextResults" type="checkbox" ...>Allow entry of text results.</label>

그런 다음 위의 확인란을 선택했는지 여부에 따라 텍스트와 숫자 사이에서 유형을 전환하는 클릭 핸들러를 확인란에 연결했습니다.

$(document).ready(function () {
    var cb = document.getElementById('cbAllowTextResults');
    cb.onclick = function (event) {
        if ($("#cbAllowTextResults").is(":checked"))
            $("#result").attr("type", "text");
        else
            $("#result").attr("type", "number");

    }
});

이것은 우리에게 잘 작동했습니다.




당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.