regex - 허용 - 정규표현식 테스트




전화 번호 유효성 검사를위한 포괄적 인 정규 표현식 (20)

전화 번호의 유효성을 검사하기위한 포괄적 인 정규식을 작성하려고합니다. 이상적으로는 국제 형식을 처리 할 수 ​​있지만 다음과 같은 미국 형식을 처리해야합니다.

  • 1-234-567-8901
  • 1-234-567-8901 x1234
  • 1-234-567-8901 ext1234
  • 1 (234) 567-8901
  • 1.234.567.8901
  • 1/234/567/8901
  • 12345678901

나는 현재의 시도로 대답 하겠지만, 누군가는 더 나은 그리고 / 또는 더 우아한 것을 희망하고 있습니다.


나는 Number::Phone::USRegexp::Common (특히 Regexp::Common::URI::RFC2806 의 소스)을 Regexp::Common::URI::RFC2806 . Perl 모듈이 도움이 될 수있다.

숫자의 유효성을 검사하는 목적을 설명하기 위해 질문을 좀 더 자세하게 설명해야합니다. 예를 들어 미국에서는 911이 유효한 숫자이지만 911x는 x 값이 아닙니다. 전화 회사에서 다이얼링을 완료했을 때 전화 회사가 계산할 수 있도록하는 것입니다. 이 문제에는 몇 가지 변형이 있습니다. 하지만 정규식은 지역 코드 부분을 검사하지 않으므로 걱정하지 않아도됩니다.

전자 메일 주소의 유효성 검사와 마찬가지로 유효한 결과가 있어도 사용자가 시도 할 때까지 누군가에게 할당되었는지 여부를 알 수 없습니다.

사용자 입력의 유효성을 검사하려는 경우 왜 결과를 정규화하지 않고 처리해야합니까? 사용자가 유효한 번호로 인식 할 수없는 번호를 입력하면 입력 된대로 저장하거나 사용할 수없는 문자를 제거합니다. Number::Phone::Normalize Perl 모듈이 영감의 원천이 될 수 있습니다.


나는 가장 간단한 글을 썼다.

^([0-9\(\)\/\+ \-]*)$

아래에서 언급했듯이 문자 만 검사하며 구조 / 주문은 검사하지 않습니다.


나는 시장 조사 회사에서 근무하며 이러한 유형의 입력을 모두 필터링해야합니다. 너는 너무 복잡해. 영숫자가 아닌 문자를 제거하고 확장이 있는지 확인하십시오.

추가 분석을 위해 유효한 번호의 데이터베이스에 액세스 할 수있는 많은 제공 업체 중 하나에 가입 할 수있을뿐만 아니라 유선 전화인지 이동 전화인지, 연결이 끊어 졌는지 여부 등을 알려줄 수도 있습니다.


나는 이것이 꽤 잘 작동하는 것을 발견했다.

^\(*\+*[1-9]{0,3}\)*-*[1-9]{0,3}[-. /]*\(*[2-9]\d{2}\)*[-. /]*\d{3}[-. /]*\d{4} *e*x*t*\.* *\d{0,4}$

다음 숫자 형식에 사용할 수 있습니다.

1-234-567-8901
1-234-567-8901 x1234
1-234-567-8901 ext1234
1 (234) 567-8901
1.234.567.8901
1/234/567/8901
12345678901
1-234-567-8901 ext. 1234
(+351) 282 433 5050

전역 AND 행을 사용하여 플래그를 확인하십시오.

링크 : http://www.regexr.com/3bp4b


달성해야 할 유효성 검사와 가장 근접한 멋진 패턴이 있습니다. 나는 원래의 저자는 아니지만,이 문제가 매우 복잡하고 간결하거나 널리 유용한 대답이 아니라는 것을 알았 기 때문에 공유 가치가 있다고 생각합니다.

다음 정규식은 널리 사용되는 숫자 및 문자 조합을 다양한 전역 전화 번호 형식으로 catch합니다.

/^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/gm

양:
+42 555.123.4567
+ 1- (800) -123-4567
+7 555 1234567
+7 (926) 1234567
(926) 1234567
+79261234567
926 1234567
9261234567
1234567
123-4567
123-89-01
495 1234567
469 123 45 67
89261234567
8 (926) 1234567
926.123.4567
415-555-1234
650-555-2345
(416)555-3456
202 555 4567
4035555678
1 416 555 9292

부정:
926 3 4
8 800 600-APPLE

원본 출처 : http://www.regexr.com/38pvb


당신은 단 하나의 / 간단한 정규식으로 국제 전화 번호를 다루는 데 어려움을 겪을 것입니다. 이 게시물 은 국제 (심지어 북미) 전화 번호의 어려움을 참조하십시오.

처음 몇 자릿수를 구문 분석하여 국가 코드가 무엇인지 파악한 다음 해당 국가를 기반으로 다르게 행동해야합니다.

그 외에 - 당신이 준 목록에는 또 다른 일반적인 미국 형식이 포함되어 있지 않습니다. 초기 1을 떠나야합니다. 미국의 대부분의 휴대 전화는 그것을 필요로하지 않으며, 국제적으로 전화를 걸지 않으면 젊은 세대를 좌절시킬 것입니다.

당신은 그것이 까다로운 문제라는 것을 정확히 확인했습니다 ...

-아담


모든 공백을 제거하는 대답은 깔끔하지만 정규 표현식을 찾는 문제는 실제로 해결되지 않습니다. 예를 들어, 웹 페이지를 다운로드하고 정규식을 사용하여 모든 전화 번호를 추출하는 테스트 스크립트를 가져옵니다. 어쨌든 정규식이 필요하기 때문에, 정규식을 사용하여 모든 작업을 수행 할 수도 있습니다. 나는 이것을 생각해 냈다.

1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?

테스트하기위한 펄 스크립트가 있습니다. 일치하면 $ 1에 지역 번호가 포함되고 $ 2와 $ 3에는 전화 번호가 포함되고 $ 5에는 확장이 포함됩니다. 내 테스트 스크립트는 인터넷에서 파일을 다운로드하고 그 안에있는 모든 전화 번호를 인쇄합니다.

#!/usr/bin/perl

my $us_phone_regex =
        '1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?';


my @tests =
(
"1-234-567-8901",
"1-234-567-8901 x1234",
"1-234-567-8901 ext1234",
"1 (234) 567-8901",
"1.234.567.8901",
"1/234/567/8901",
"12345678901",
"not a phone number"
);

foreach my $num (@tests)
{
        if( $num =~ m/$us_phone_regex/ )
        {
                print "match [$1-$2-$3]\n" if not defined $4;
                print "match [$1-$2-$3 $5]\n" if defined $4;
        }
        else
        {
                print "no match [$num]\n";
        }
}

#
# Extract all phone numbers from an arbitrary file.
#
my $external_filename =
        'http://web.textfiles.com/ezines/PHREAKSANDGEEKS/PnG-spring05.txt';
my @external_file = `curl $external_filename`;
foreach my $line (@external_file)
{
        if( $line =~ m/$us_phone_regex/ )
        {
                print "match $1 $2 $3\n";
        }
}

편집하다:

정규식에서 \ W *를 \ s * \ W? \ s *로 변경하여 조금 더 조일 수 있습니다. 나는 그것을 작성했을 때 양식에 대한 사용자 입력의 유효성을 검사하는 측면에서 정규식을 생각하지 않았습니다. 그러나이 변경으로 인해 그 목적을 위해 정규 표현식을 사용할 수 있습니다.

'1?\s*\W?\s*([2-9][0-8][0-9])\s*\W?\s*([2-9][0-9]{2})\s*\W?\s*([0-9]{4})(\se?x?t?(\d*))?';

무제한 정규식에서 내 시도 :

/^[+#*\(\)\[\]]*([0-9][ ext+-pw#*\(\)\[\]]*){6,45}$/

수락 :

+(01) 123 (456) 789 ext555
123456
*44 123-456-789 [321]
123456
123456789012345678901234567890123456789012345
*****++[](][((( 123456tteexxttppww

거부 :

mob 07777 777777
1234 567 890 after 5pm
john smith
(empty)
1234567890123456789012345678901234567890123456
911

그것을 표시하기 위해 위생 처리하는 것은 사용자에게 달려 있습니다. 유효성을 확인한 후에도 숫자 있습니다.


스트리핑 () 문자는 일반적인 영국 번호 작성 스타일에 대해서는 작동하지 않습니다. +44 (0) 1234 567890 이는 국제 전화 번호 중 하나를 다이얼하는 것을 의미합니다.
+441234567890
또는 영국 전화 01234567890


아무도 항목을 필요로하지 않는 방법을 주소 지정했기 때문에이 스레드에 대한 응답으로 내 대답을 포함하기로 결정하기 전에 다른 질문에 대한이 질문에 대답했습니다. 그냥 정규식을 넘겨 줘야합니다. Regex가 잘못되어 예기치 않은 것들과 일치 함

그 사이트의 내 게시물에서 나는 (내가 다른 사이트에서했던 것처럼) 자신이 원하는 전화 번호 형식을 위해 자신의 정규식을 만드는 것을 돕는 퀵 가이드를 만들었습니다. 너무 제한적이라면, 원하는 결과를 얻지 못할 수도 있으며, 세계에서 가능한 모든 전화 번호를 수락하는 "모든 크기에 맞는"해결책이 없습니다. 선택한 형식으로 받아 들일 수있는 것만 선택할 수 있습니다. 자신의 책임하에 사용하십시오.

빠른 치트 시트

  • 표현식을 시작하십시오. /^
  • 공백이 필요하면 다음을 사용하십시오 : [\s] 또는 \s
  • 괄호가 필요하면 [(][)] . \( and \) 사용하면 추악 해지고 혼란스럽게 할 수 있습니다.
  • 선택 품목이 필요하면 ? 그 후에
  • 하이픈을 원하면 - 또는 [-] 만 입력하면됩니다. 그러나 일련의 다른 문자에 처음이나 마지막으로 넣지 않으면 escape 할 필요가 있습니다 : \-
  • 슬롯에서 다른 선택을 허용하려면 옵션 주위에 대괄호를 넣으십시오. [-.\s] 에는 하이픈, 마침표 또는 공백이 필요합니다. 마지막 괄호 뒤에있는 물음표는 해당 슬롯에 대한 선택 사항을 모두 만듭니다.
  • \d{3} : 3 자리 숫자가 필요합니다 : 000-999. [0-9][0-9][0-9] 대한 속기.
  • [2-9] : 해당 슬롯에 대해 숫자 2-9가 필요합니다.
  • (\+|1\s)? : "더하기"또는 1과 공백 (파이프 문자, | ,는 "또는")을 수락하고 선택적으로 만듭니다. "더하기"기호는 이스케이프해야합니다.
  • 특정 번호가 슬롯에 일치하도록하려면 [246] 에 2, 4 또는 6이 필요합니다. [77|78] 에는 77 또는 78이 필요합니다.
  • $/ : 표현식 끝내기

적어도 NANP 라고 불리는 북미 지역에는 이것에 대한 사양이 있습니다.

원하는 것을 정확하게 지정해야합니다. 법적 구분 기호는 무엇입니까? 공백, 대시 및 마침표? 구분 기호는 허용되지 않습니까? 구분 기호 (예 : + 0.111-222.3333)를 사용할 수 있습니까? 확장 (예 : 111-222-3333 x 44444)은 어떻게 처리됩니까? 특별한 번호는 어때? 911 같은거야? 지역 번호가 선택 사항이거나 필수 사항입니까?

다음은 확장자가 허용되는 7 자리 또는 10 자리 숫자에 대한 정규 표현식입니다. 구분 기호는 공백, 대시 또는 마침표입니다.

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$

지금까지 최선을 다 했어. 위의 형식을 처리하지만 가능한 다른 형식이 누락되었다고 확신합니다.

^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$

필리핀 휴대 전화 번호에 대한 간단한 정규식 패턴입니다.

((\+[0-9]{2})|0)[.\- ]?9[0-9]{2}[.\- ]?[0-9]{3}[.\- ]?[0-9]{4}

또는

((\+63)|0)[.\- ]?9[0-9]{2}[.\- ]?[0-9]{3}[.\- ]?[0-9]{4}

다음과 일치합니다.

+63.917.123.4567  
+63-917-123-4567  
+63 917 123 4567  
+639171234567  
09171234567  

첫 번째 문자는 두 자릿수의 국가 코드와 일치하며, 두 번째 문자는 필리핀 국가 코드와 독점적으로 일치합니다.

그것을 여기에서 http://refiddle.com/1ox 보십시오 : http://refiddle.com/1ox


형식 유효성 검사에 대해 말하면 정확한 데이터뿐만 아니라 올바른 의미를 검증하는 정규 표현식은 국가 및 공급자 표준이 다양하기 때문에 매우 복잡 할 것입니다. 최신 정보를 유지하는 것도 어려울 것입니다.

나는이 질문을 내부적으로 일치하지 않을 수있는 폭넓게 유효한 패턴을 찾는 것으로 해석한다. 예를 들어 유효한 숫자 세트를 가지고 있지만 국선 코드 접두사에 대한 유효한 패턴에 대한 트렁크 라인, 교환 등을 검증하지 않는다. .

북미는 간단하고 국제적으로 사람들이 숫자를 지정하고 기억하는 방식을 다루는 '관용적 인'패턴을 선호합니다.

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

북아메리카 패턴은 한 괄호가 포함되어 있으면 두 가지가 모두 있는지 확인합니다. 국제선은 선택적 초기 '+'및 국가 코드를 설명합니다. 그 후에, 당신은 숙어에 빠져 있습니다. 유효한 일치 항목은 다음과 같습니다.

  • (xxx)xxx-xxxx
  • (xxx)-xxx-xxxx
  • (xxx)xxx-xxxx x123
  • 12 1234 123 1 x1111
  • 12 12 12 12 12
  • 12 1 1234 123456 x12345
  • +12 1234 1234
  • +12 12 12 1234
  • +12 1234 5678
  • +12 12345678

내 경험이 북미, 유럽 및 아시아 지역으로 제한되어 있기 때문에 편향 될 수 있습니다.


/^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i

일치하는 항목 :

 - (+351) 282 43 50 50
 - 90191919908
 - 555-8909
 - 001 6867684
 - 001 6867684x1
 - 1 (234) 567-8901
 - 1-234-567-8901 x1234
 - 1-234-567-8901 ext1234
 - 1-234 567.89/01 ext.1234
 - 1(234)5678901x1234
 - (123)8575973
 - (0055)(123)8575973

$ n에서 다음을 저장합니다.

  1. 국가 표시기
  2. 전화 번호
  3. 신장

https://www.regexpal.com/?fam=99127 테스트 할 수 있습니다.


아일랜드의 휴대 전화 번호와 비슷한 일을하는 데 관심이있는 사용자는 다음과 같이 간단하게 달성 할 수 있습니다.

http://ilovenicii.com/?p=87

PHP

<?php
$pattern = "/^(083|086|085|086|087)\d{7}$/";
$phone = "087343266";

if (preg_match($pattern,$phone)) echo "Match";
else echo "Not match";

또한이 링크에는 JQuery 솔루션이있다.

편집하다:

jQuery 솔루션 :

    $(function(){
    //original field values
    var field_values = {
            //id        :  value
            'url'       : 'url',
            'yourname'  : 'yourname',
            'email'     : 'email',
            'phone'     : 'phone'
    };

        var url =$("input#url").val();
        var yourname =$("input#yourname").val();
        var email =$("input#email").val();
        var phone =$("input#phone").val();


    //inputfocus
    $('input#url').inputfocus({ value: field_values['url'] });
    $('input#yourname').inputfocus({ value: field_values['yourname'] });
    $('input#email').inputfocus({ value: field_values['email'] }); 
    $('input#phone').inputfocus({ value: field_values['phone'] });



    //reset progress bar
    $('#progress').css('width','0');
    $('#progress_text').html('0% Complete');

    //first_step
    $('form').submit(function(){ return false; });
    $('#submit_first').click(function(){
        //remove classes
        $('#first_step input').removeClass('error').removeClass('valid');

        //ckeck if inputs aren't empty
        var fields = $('#first_step input[type=text]');
        var error = 0;
        fields.each(function(){
            var value = $(this).val();
            if( value.length<12 || value==field_values[$(this).attr('id')] ) {
                $(this).addClass('error');
                $(this).effect("shake", { times:3 }, 50);

                error++;
            } else {
                $(this).addClass('valid');
            }
        });        

        if(!error) {
            if( $('#password').val() != $('#cpassword').val() ) {
                    $('#first_step input[type=password]').each(function(){
                        $(this).removeClass('valid').addClass('error');
                        $(this).effect("shake", { times:3 }, 50);
                    });

                    return false;
            } else {   
                //update progress bar
                $('#progress_text').html('33% Complete');
                $('#progress').css('width','113px');

                //slide steps
                $('#first_step').slideUp();
                $('#second_step').slideDown();     
            }               
        } else return false;
    });

    //second section
    $('#submit_second').click(function(){
        //remove classes
        $('#second_step input').removeClass('error').removeClass('valid');

        var emailPattern = /^[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;  
        var fields = $('#second_step input[type=text]');
        var error = 0;
        fields.each(function(){
            var value = $(this).val();
            if( value.length<1 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='email' && !emailPattern.test(value) ) ) {
                $(this).addClass('error');
                $(this).effect("shake", { times:3 }, 50);

                error++;
            } else {
                $(this).addClass('valid');
            }


        function validatePhone(phone) {
        var a = document.getElementById(phone).value;
        var filter = /^[0-9-+]+$/;
            if (filter.test(a)) {
                return true;
            }
            else {
                return false;
            }
        }

        $('#phone').blur(function(e) {
            if (validatePhone('txtPhone')) {
                $('#spnPhoneStatus').html('Valid');
                $('#spnPhoneStatus').css('color', 'green');
            }
            else {
                $('#spnPhoneStatus').html('Invalid');
            $('#spnPhoneStatus').css('color', 'red');
            }
        });

     });

        if(!error) {
                //update progress bar
                $('#progress_text').html('66% Complete');
                $('#progress').css('width','226px');

                //slide steps
                $('#second_step').slideUp();
                $('#fourth_step').slideDown();     
        } else return false;

    });


    $('#submit_second').click(function(){
        //update progress bar
        $('#progress_text').html('100% Complete');
        $('#progress').css('width','339px');

        //prepare the fourth step
        var fields = new Array(
            $('#url').val(),
            $('#yourname').val(),
            $('#email').val(),
            $('#phone').val()

        );
        var tr = $('#fourth_step tr');
        tr.each(function(){
            //alert( fields[$(this).index()] )
            $(this).children('td:nth-child(2)').html(fields[$(this).index()]);
        });

        //slide steps
        $('#third_step').slideUp();
        $('#fourth_step').slideDown();            
    });


    $('#submit_fourth').click(function(){

        url =$("input#url").val();
        yourname =$("input#yourname").val();
        email =$("input#email").val();
        phone =$("input#phone").val();

        //send information to server
        var dataString = 'url='+ url + '&yourname=' + yourname + '&email=' + email + '&phone=' + phone;  



        alert (dataString);//return false;  
            $.ajax({  
                type: "POST",  
                url: "http://clients.socialnetworkingsolutions.com/infobox/contact/",  
                data: "url="+url+"&yourname="+yourname+"&email="+email+'&phone=' + phone,
                cache: false,
                success: function(data) {  
                    console.log("form submitted");
                    alert("success");
                }
                });  
        return false;

   });


    //back button
    $('.back').click(function(){
        var container = $(this).parent('div'),
        previous  = container.prev();

        switch(previous.attr('id')) {
            case 'first_step' : $('#progress_text').html('0% Complete');
                  $('#progress').css('width','0px');
                       break;
            case 'second_step': $('#progress_text').html('33% Complete');
                  $('#progress').css('width','113px');
                       break;

            case 'third_step' : $('#progress_text').html('66% Complete');
                  $('#progress').css('width','226px');
                       break;

        default: break;
    }

    $(container).slideUp();
    $(previous).slideDown();
});


});

Source .


나는 같은 문제로 어려움을 겪고 있었고, 내 신청서를 미래의 증거로 만들려고 노력했지만,이 사람들은 저를 올바른 방향으로 가도록했습니다. 실제로 작동하는지 여부를 확인하기 위해 번호 자체를 확인하는 것이 아니며 일련 번호가 입력되었거나 확장되지 않았는지 확인하려고합니다.

최악의 시나리오는 사용자가 XML 파일에서 포맷되지 않은 번호를 가져와야하는 경우 전화 번호 패드에 번호를 입력하는 012345678x5것입니다. RegEx의 그런 종류는 저를 위해 이것을 좋아할 것입니다 :

\d+ ?\w{0,9} ?\d+
  • 01234467 extension 123456
  • 01234567x123456
  • 01234567890

나는 이것이 이것을 흥미로운 것으로 생각했다. 나는 그것을 테스트하지는 않았지만 작동하는 것처럼 보입니다.

<?php
/*
string validate_telephone_number (string $number, array $formats)
*/

function validate_telephone_number($number, $formats)
{
$format = trim(ereg_replace("[0-9]", "#", $number));

return (in_array($format, $formats)) ? true : false;
}

/* Usage Examples */

// List of possible formats: You can add new formats or modify the existing ones

$formats = array('###-###-####', '####-###-###',
                 '(###) ###-###', '####-####-####',
                 '##-###-####-####', '####-####', '###-###-###',
                 '#####-###-###', '##########');

$number = '08008-555-555';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '123-555-555';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '1800-1234-5678';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '(800) 555-123';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '1234567890';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}
?>

이 경우 Masked Input을 사용하는 것이 좋습니다. 그렇게하면 사용자는 숫자 만 입력 할 수 있으며 원하는대로 형식을 지정할 수 있습니다. 이것이 웹 애플리케이션을위한 것인지 확신 할 수 없지만,이 작업을 수행하기위한 몇 가지 옵션을 제공하는 jQuery 플러그인이있다.

http://digitalbush.com/projects/masked-input-plugin/

심지어 자습서에서 전화 번호 입력을 가리는 법을 설명합니다.


    pattern="^[\d|\+|\(]+[\)|\d|\s|-]*[\d]$" 
    validateat="onsubmit"

숫자로 끝나야하며 (또는 + 또는 숫자로 시작하고 + - (또는)를 포함 할 수 있음)





phone-number