[regex] 유효한 국제 전화 번호와 일치하는 정규 표현식은 무엇입니까?

전화를 걸기 전에 전화 번호가 유효한지 확인해야합니다. 전화는 전 세계 어디로 든 갈 수 있습니다.

유효한 국제 전화 번호와 일치하는 정규 표현식은 무엇입니까?



답변

\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)\d{1,14}$

일반 국제 전화 번호를 일치시키기위한 올바른 형식입니다. 미국 유선 중심의 국제 액세스 코드 011을 표준 국제 액세스 코드 식별자 ‘+’로 대체하여 필수로 지정했습니다. 또한 국가 번호의 최소값을 한 자리 이상으로 변경했습니다.

이 형식의 번호를 휴대폰 주소록에 입력하면 여행지에 관계없이 주소록에있는 모든 번호로 성공적으로 전화를 걸 수 있습니다. 유선 전화의 경우 플러스를 전화를 거는 국가의 국제 액세스 코드로 바꾸십시오.

이것은 국가 번호 계획 규칙을 고려하지 않습니다. 특히 국가 번호 계획이 허용하지 않는 위치에서 0과 1을 허용하고 일부 국가 (예 : 미국)의 국가 번호 계획보다 긴 번호 길이를 허용합니다.


답변

모든 국가 코드는 ITU에서 정의합니다. 다음 정규식은 ITU-T E.164 및 ITU 운영 게시판 번호 930 – 15.IV.2009의 부록을 기반으로 합니다. 여기에는 향후 사용을 위해 예약 된 모든 현재 국가 코드와 코드가 포함되어 있습니다. 조금 짧아 질 수 있지만 각 코드를 독립적으로 포함하기로 결정했습니다.

미국에서 거는 전화 용입니다. 다른 국가의 경우 국제 액세스 코드 (정규식 시작 부분의 011)를 해당 국가의 전화 걸기 계획에 적합한 것으로 바꾸십시오 .

또한 ITU E.164는 전체 국제 전화 번호의 최대 길이를 15 자리로 정의합니다. 즉, 3 자리 국가 코드를 사용하면 최대 12 자리가 추가되고 1 자리 국가 코드에는 최대 14 자리가 추가 될 수 있습니다. 따라서

[0-9]{0,14}$

정규식의 끝입니다.

가장 중요한 것은이 정규식이 번호가 유효 함을 의미하지 않는다는 것입니다. 각 국가는 자체 내부 번호 지정 계획을 정의합니다. 이것은 국가 코드가 유효한지 확인하기위한 것입니다.

283 | 282 | 281 | 280 | 269 | 268 | 267 | 266 | 265 | 264 | 263 | 262 | 261 | 260 | 259 | 258 | 257 | 256 | 255 | 254 | 253 | 252 | 251 | 250 | 249 | 248 | 247 | 246 | 245 | 244 | 243 | 242 | 241 | 240 | 239 | 238 | 237 | 236 | 235 | 234 | 233 | 232 | 231 | 230 | 229 | 228 | 227 | 226 | 225 | 224 | 223 | 222 | 221 | 220 | 219 | 218 | 217 | 216 | 215 | 214 | 213 | 212 | 211 | 210 | 98 | 95 | 94 | 93 | 92 | 91 | 90 | 86 | 84 | 82 | 81 | 66 | 65 | 64 | 63 | 62 | 61 | 60 | 58 | 57 | 56 | 55 | 54 | 53 | 52 | 51 | 49 | 48 | 47 | 46 | 45 | 44 | 43 | 41 | 40 | 39 | 36 | 34 | 33 | 32 | 31 | 30 | 27 | 20 | 7 | 1) [0-9] {0, 14} $


답변

이것은 추가 최적화입니다.

\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)
\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*(\d{1,2})$

(i) 유효한 국제 접두어
(ii) 뒤에 9 자리 또는 10 자리 숫자, 구분 기호의 유형 또는 배치 (마지막 두 자리 제외)를 허용합니다.

일치합니다 :
+ 1-234-567-8901
+ 61-234-567-89-01
+ 46-234 5678901
+1 (234) 56
89901 +1 (234) 56-89901
+46.234.567.8901
+1 / 234 / 567 / 8901


답변

Google의 libphonenumber 라이브러리를 사용할 수 있습니다 .

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
String decodedNumber = null;
PhoneNumber number;
    try {
        number = phoneNumberUtil.parse(encodedHeader, null);
        decodedNumber = phoneNumberUtil.format(number, PhoneNumberFormat.E164);
    } catch (NumberParseException e) {
        e.printStackTrace();
    }


답변

이것은 국제 전화 번호에 적용됩니다.

씨#:

@"^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$"

JS :

/^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/


답변

나는 이것을 사용한다 :

/([0-9\s\-]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/

장점 : + 또는 011 시작을 인식하고 필요한만큼 길게 만들며 많은 확장 규칙을 처리합니다. (#, x, ext, extension)


답변

다음은 정규식의 “최적화 된”버전입니다.

^011(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)\d{0,14}$

정규식 구문이를 지원하지 않는 경우 \ds를로 바꿀 수 있습니다 .[0-9]\d