전화 번호에 어떤 특수 문자를 허용해야합니까?


20

따라서 전 세계 사용자에게 사용될 웹 페이지를 디자인하고 있으며 캐나다, 미국, 인도, 영국 등의 사용자를 포함합니다.이 전화 번호 필드에 대한 유효성 검사를 적용해야하지만 이에 대한 최선의 방법은 확실하지 않습니다 .

내가 생각할 수있는 유효한 형식 중 일부는 다음과 같습니다.

  1. 1800123456 (인도)
  2. 미국 전화 번호에서 "-"사용

사용자가 입력 할 수있는 특수 문자 (예 :)에 대해 약간 혼란 스럽습니다 - / (). 과거에 다른 사람들이 어떻게이 문제를 해결 했습니까?


1
0800DIALTHIS와 같이 문자로 표시된 전화 번호는 어떻습니까?
mouviciel

3
무엇을 막으려 고합니까? 거짓말하는 사용자? 사용자가 전화 번호를 알고 싶지 않습니까? 사용자가 입력하기에 너무 게으른가요? 사용자가 오타를하고 있습니까?
Benjol

@ mouviviel : 그렇습니다. 나는 한 번에 하나의 평가 시나리오를 취하고 있다고 생각해야하므로 그것에 대해 생각할 것입니다.
레인저

@Benjol :이 응용 프로그램은 상용 응용 프로그램이므로 우리는 coustomers에 위험을 감수 할 수 없습니다. 평가는 오타뿐만 아니라 응용 프로그램을 저장하기 때문에 매우 중요합니다. DB가 쓸모없는 정크로 가득 차기를 원하지 않습니다.
레인저

5
이메일 주소를 확인하기 위해 무엇을하고 있습니까? 거의 모든 웹 사이트가 "실제"검증 (즉, 메일 발송)을 수행한다는 것을 알 수 있습니다. 전화 번호가 그렇게 중요하다면 그와 동등한 것을해야한다고 생각합니다.
Benjol

답변:


21

(프로그래머로서 코드를 작성하기 위해 지불 한 것)을 제한 할 있다고해서 실제로 그렇게해야하는 것은 아닙니다.

숫자를 확인하는 요점은 무엇입니까? 왜 유용한가요? 사용자가 "0800DIALTHIS"또는 "私 は 電話 番号 を 持 っ て い な い"또는 "(499) 123-45-67 добавочный 4425"를 입력하면 실패합니까? 사용자는 전화로 연락하는 방법에 대한 중요한 정보를 전달하기를 원했을뿐입니다 ( "글로벌"이라고 말하지 않겠습니까?).

또한 데이터 저장 방식은 사용 방식에 따라 관리되어야합니다. 숫자를 어떻게 사용 하시겠습니까? SMS 스팸을 자동 전송하는 데 사용됩니까? 아니면 관리자가 수동으로 전화를 걸까요? 후자의 경우, 인간의 두뇌가 가장 적합한 방식으로 파싱 할 수 있기 때문에 추가 문자를 허용해도 괜찮습니다. 이 경우에는 실제로 사용자를 성가 시게 할 유효성 검사가 필요하지 않습니다.


7
"사용자가 중요한 정보를 전달하기를 원했습니다."+1 실제 기술 (또는 조직적) 요구 사항없이 사용자를 성가 시게하는 불필요한 유효성 검사를 너무 자주 보았습니다.
perdian

6
+1-전화 번호 유효성 검사 (특히 광범위하게 정의 됨)는 종종 의미가없고 미래를 보장하지 않습니다 (예 : KL5-6743은 유효한 전화 번호로 사용됨). 특별한 경우에 사용자를 성가 시게합니다. 전화 번호를 큰 텍스트 필드로 만들고 자동 다이얼러 (이 시나리오에있는 경우)가 가능한 것을 구문 분석 할 수있게하십시오. 상황을 적절하게 처리 할 수있는 인간에게는 예외가 제기 될 수 있습니다.
EZ Hart

8
+1 그리고 가장 중요한 것은 전화 번호가 유효하기 때문에 전화 번호가 존재한다는 의미는 아니며, 존재한다고해서 그것이 해당 사람의 것이 아니라는 것을 의미하지는 않습니다.
Benjol

예, 주요 사용자가 거주하는 국가를 파악한 다음 유효성 검사 코드를 작성하겠습니다. 모두 감사합니다, 나는 당신의 노력을 평가합니다.
레인저

4
@Ranger 그것은 대답이 얻은 것과 정확히 반대입니다.
Sebastian Redl

7

국가마다 형식이 다르기 때문에 숫자가 유효한지 알기가 매우 어렵습니다. 예를 들어 프랑스에서는 06 12 34 56 78은 유효한 전화 번호 인 반면 00 12 34 56 78은 01이 아닌 09, 06, 07 만 휴대 전화로 시작할 수 있기 때문에 그렇지 않습니다.

또한 같은 국가에서도 전화 번호를 여러 형식으로 쓸 수 있습니다. 나는 본 적이:

  • 06 12 34 56 78
  • 0612345678
  • 06.12.34.56.78
  • 06-12-34-56-78
  • +33612345678
  • +33 (0) 6 12 34 56 78

마지막 두 개는 국제 형식입니다.

일반적으로 :

  1. 대괄호, +선행 문자로만 기호, 대시, 점, 쉼표 및 공백을 허용하십시오.
  2. 가능하면 정규화 된 양식 만 기억하십시오 (예 : +33 (0) 612345678).
  3. 이것이 가능하지 않으면 공백과 같은 구분 기호 문자를 제거하십시오.

국가 별 유효성 검사에 너무 깊이 들어가는 것은 권장되지 않습니다. 많은 규칙이있을뿐만 아니라 규칙도 변경됩니다. 예를 들어, 몇 년 전 프랑스에서는 07 또는 09로 시작하는 전화 번호가 없었습니다. 휴대폰 수가 증가함에 따라 07이 나타났습니다.

특수 번호를 고려할 수도 있습니다. 예를 들어, 3635는 4 자리 만 포함하고 0이 아닌 숫자로 시작하더라도 프랑스에서 유효한 숫자는 3635입니다.


1
예제에서 대괄호 사용을 보여주는 것이 좋습니다. 국제 번호는 지역 번호의 맨 앞에 0을 포함하여 해외에서 전화를 걸 때 전화를 걸지 않음을 나타내는 데 종종 사용됩니다. 예를 들어 +31 (0)30 123456731은 네덜란드이고 030은 지역 번호이고 1234567은 가입자입니다.
Marjan Venema

2
확장 코드를위한 선택적 필드 (파운드 또는 별표 키를 허용해야 할 수도 있음)를 잊지 마십시오.
rwong

@MarjanVenema, 국제 전화를 많이하지는 않지만 0을 추가하고 괄호 (0)를 추가하여 전화를 걸지 않는 것이 표준입니까? 0을 완전히 빼내는 것이 더 간단하지 않습니까?
CaffGeek

@ 차드 : 아니. 국제 사용자에게이를 제거해야하고 국가 사용자에게이를 사용해야한다고 알려줍니다. 모든 국가에서 지역 코드가 0으로 시작되는 것은 아닙니다. 이 방법을 사용하면 누군가가 숫자를 볼 때 그들이있을 때와 해외에있을 때해야 할 일을 알 수 있습니다. 하지 전국적으로 호출 모든 사람이 거주 결국 ... 할 필요가
마르 얀 Venema의

@MarjanVenema, 오, 내가 알다시피, 전국 사용자가 그것을 필요로한다는 것을 깨닫지 못했고, 오늘 새로운 것을 배웠습니다.
CaffGeek

3

문자를 제한하지 마십시오. 그가 준 모든 것을 가져 가라. 그러나 전화를 걸 때는 숫자 만 사용하십시오. 그래도 잘못 작동 할 수 있습니다. 나는 123-4567-9가 내선 번호가 아니라 1234567에서 1234569까지의 숫자를 의미한다는 것을 알기 전에 1 년 전에 태국에있었습니다. 전화 회사가 여분의 숫자를 무시했기 때문에 "12345679"로 전화를 걸면 효과가있었습니다. 아무거나 가지고 숫자 만 다이얼하십시오.

새 전화가 전화 번호에 공백을 허용한다는 점이 마음에 듭니다. "123 456 7890"을 입력 할 수 있습니다.


2
+100 컴퓨터가 스스로 그것을하는 방법에 대한 단서가없는 것처럼 "숫자를 제거하십시오"라고 말하는 것보다 더 나쁜 것은 없습니다. 신용 카드 번호와 동일합니다.
Bryan Oakley

0

대괄호, 대시 및 공백.

사용자가 해당 기호가 포함 된 전화 번호를 입력하면 국가 별 규칙 (각 국가마다 해당 규칙을 수집해야 함)에 따라 해당 번호를 확인한 다음 숫자가 아닌 숫자는 실제로 삭제 될 수 있습니다 소프트웨어에서 내부적으로 처리됩니다.

IDD (국제 직접 전화 걸기)를 사용하면 숫자 펀치에 일시 중지를 제외하고 실제로 전화를 걸 때 "특수 문자"를 사용해야 할 수 없기 때문입니다.

(나는 이것에 대해 전혀 알지 못합니다. 틀렸다면 정정하십시오.)


3
국제 접속을위한 \ + 표시를 잊고 있습니다
Marjan Venema

2
문자 x도 허용하십시오. 적어도 미국에서는 확장자 앞에 x를 붙이는 것이 일반적입니다 (예 : 555-1212 x123).
Bryan Oakley

0

유효성을 검사해야하는 유일한 숫자는 자릿수입니다. 전화해야하는 숫자와 일치합니까?

액세스 코드는 사용자가 입력 할 수 없습니다 (예 : 미국의 경우 +1). 이유를 말씀 드리겠습니다. 미국인이 미국에 입국하는 경우 모두 정통하지는 않지만 1 대신 001을 입력하고 싶을 것입니다. 이유는 00이라는 이유는 미국 내에서 국제 번호에 액세스하는 방법입니다. 그들은 그 차이와 +1의 차이점이 무엇인지 모릅니다. 지역 번호 (때로는 같은 지역 번호) 사이에서 유선 전화를 거는 경우 해당 번호 앞에 1을 입력하십시오. 일본처럼.

일본을 가져 가라. 지방의 유선 전화선은 앞에 0으로 접근합니다. 그러나 일본 이외의 지역에서 전화를 거는 경우 0이 필요하지 않습니다.

중국의 휴대 전화 번호는 10 자리이고 홍콩의 전화 번호는 8입니다. 양식이 국가를 캡처하는 경우 번호 시작 부분에 국가 코드를 입력하지 않아도됩니다. 바로 옆에 읽기 전용 텍스트로 자동 표시하면됩니다. 입력해야하는 숫자입니다.

목록은 계속됩니다.

자릿수를 확인하고 (문자가 허용되지 않도록) 최종 사용자가 올바른 자릿수를 쉽게 입력 할 수 있도록하십시오. 즉, 국가 코드를 입력 할 필요가 없으며 양식이 똑똑한 경우 유선 전화 번호 인 경우 지역 번호를 입력하지 않아도됩니다. 또는 일본 번호 앞에 0과 같은 액세스 코드와 같은 항목을 입력하기 시작하면 필요하지 않다고 알려주십시오.

숫자 이외의 다른 모든 문자는 다음과 같은 기준이되어야합니다. 문자를 입력 할 기회가 없습니다.


1
나는 어떤 글자도 받아들이지 않기로 동의하지 않습니다. 계속해서 동의 한 다음 무시하십시오. 사람들은 자연스럽게 선행 "x"로 확장자를 씁니다 (예 : 555-1212 x123). 왜 허용하지 않습니까? 인간은 잘 파싱 할 수 있으며 컴퓨터에서 사용해야하는 경우 비 숫자를 사소하게 제거 할 수 있습니다.
Bryan Oakley 2012

0

구글은 이것을 위해 lib를 가지고있다 :

국제 전화 번호의 구문 분석, 형식 지정 및 유효성 검사를위한 Google의 공통 Java, C ++ 및 JavaScript 라이브러리

https://github.com/googlei18n/libphonenumber

최선의 노력을 다하지만, 결코 쉬운 일이 아니기 때문에 처리되지 않은 경우가 있어야한다고 생각합니다. 사용자가 숫자와 문자를 입력하도록하고 나중에 코드를 사용하여 문자를 제거하십시오.

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