ตรวจสอบหมายเลขโทรศัพท์ด้วย JavaScript


143

ฉันพบรหัสนี้ในบางเว็บไซต์และทำงานได้อย่างสมบูรณ์ ตรวจสอบว่าหมายเลขโทรศัพท์อยู่ในรูปแบบใดรูปแบบหนึ่งต่อไปนี้:
(123) 456-7890หรือ123-456-7890

ปัญหาคือว่าลูกค้าของฉัน (ผมไม่ทราบว่าทำไมบางที stuffs ลูกค้า) ต้องการที่จะเพิ่มรูปแบบอื่นหมายเลขสิบติดต่อกันบางอย่างเช่นนี้: 1234567890

ฉันใช้การแสดงออกปกตินี้

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/

ฉันจะเพิ่มว่ามันยังตรวจสอบรูปแบบอื่นได้อย่างไร ฉันไม่ดีกับการแสดงออกปกติ



5
ตามหลักการง่ายๆแล้วการพยายามตรวจสอบหมายเลขโทรศัพท์นั้นเป็นเรื่องที่ล้มเหลว อะไรที่มีโครงสร้างที่แตกต่างกันในประเทศและส่วนขยายที่แตกต่างกันมันเป็นปัญหาที่ยากมาก
เควนติน

1
และสิ่งที่เกี่ยวกับเช่นสัญกรณ์ฝรั่งเศส? "12 34 56 78 90" ลบทุกอย่างยกเว้นตัวเลข (ยกเว้นอาจเป็นเครื่องหมายบวกที่จุดเริ่มต้น) และตรวจสอบความยาว
thejh

คุณไม่ควรในความเป็นจริงใช้นิพจน์ปกติเพื่อหมายเลขโทรศัพท์ตรวจสอบอย่างถูกต้อง
Dan Dascalescu

คำตอบ:


124

ก่อนอื่นเครื่องมือตรวจสอบรูปแบบของคุณนั้นเหมาะสมสำหรับหมายเลขNANP (รหัสประเทศ +1) เท่านั้น แอปพลิเคชันของคุณจะถูกใช้โดยผู้ที่มีหมายเลขโทรศัพท์จากนอกอเมริกาเหนือหรือไม่ ถ้าเป็นเช่นนั้นคุณไม่ต้องการป้องกันไม่ให้คนเหล่านั้นป้อนหมายเลข [นานาชาติ] ที่ถูกต้อง

ประการที่สองการตรวจสอบของคุณไม่ถูกต้อง ตัวเลข NANP จะอยู่ในรูปแบบNXX NXX XXXXที่Nเป็นตัวเลข 2-9 และXเป็นตัวเลข 0-9 นอกจากนี้รหัสพื้นที่และการแลกเปลี่ยนอาจไม่ใช้แบบฟอร์มN11(ลงท้ายด้วยสองรายการ) เพื่อหลีกเลี่ยงความสับสนกับบริการพิเศษยกเว้นหมายเลขในรหัสพื้นที่ที่ไม่ใช่ทางภูมิศาสตร์ (800, 888, 877, 866, 855, 855, 900) อาจมีการN11แลกเปลี่ยน

ดังนั้น regex ของคุณจะผ่านหมายเลข (123) 123 4566 แม้ว่าจะไม่ใช่หมายเลขโทรศัพท์ที่ถูกต้อง คุณสามารถแก้ไขปัญหาที่โดยการแทนที่ด้วย\d{3}[2-9]{1}\d{2}

ในที่สุดฉันก็รู้สึกว่าคุณกำลังตรวจสอบอินพุตของผู้ใช้ในเว็บเบราว์เซอร์ โปรดจำไว้ว่าตรวจสอบฝั่งไคลเอ็นต์เป็นเพียงความสะดวกสบายที่คุณให้กับผู้ใช้ ; คุณยังต้องตรวจสอบอินพุตทั้งหมด (อีกครั้ง) บนเซิร์ฟเวอร์

TL; DRไม่ได้ใช้นิพจน์ทั่วไปเพื่อตรวจสอบข้อมูลที่แท้จริงของโลกที่ซับซ้อนเช่นหมายเลขโทรศัพท์หรือURL ที่ ใช้ห้องสมุดเฉพาะ


ฉันยอมรับว่า regex ไม่เพียงพอที่จะตรวจสอบหมายเลขโทรศัพท์เพราะแผนหมายเลขโทรศัพท์ใช้งานได้จริงตามช่วงเช่น 12300000 ถึง 12399999 ( numberingplans.com/ … )

146

regex ที่ฉันเลือกคือ:

/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im

รูปแบบที่ถูกต้อง:

(123) 456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725


3
/ im คืออะไร ไม่พบคำอธิบายใน google :)
สารินสุริยกูล

7
@SarinSuriyakoon iทำให้การพิมพ์เป็นตัวพิมพ์ใหญ่และเล็กและmทำการค้นหาหลายบรรทัด
Rodrigo Leite

44
ทำไมคุณต้องใช้ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับตัวเลข?
โซโลมอน Closson

1
regex นี้ยอดเยี่ยมเพราะถ้าคุณลบ^ที่จุดเริ่มต้นและ$จุดสิ้นสุดมันสามารถค้นหาหมายเลขโทรศัพท์ในช่วงกลางของสตริงเช่นกัน
hobberwickey

2
@darioxlz '123456789' ไม่ใช่ความยาวที่ถูกต้องสำหรับหมายเลขโทรศัพท์
punjabi4life

67

หากคุณกำลังมองหา 10 และเพียง 10 หลักไม่สนใจทุกอย่างยกเว้นหลัก -

   return value.match(/\d/g).length===10;

นี่คือสิ่งที่ฉันอยากจะแนะนำ ง่ายสดชื่น และการตรวจสอบมากเกินไปอาจเป็นสิ่งที่ไม่ดีอยู่ดี
mwilcox

1
นี่เป็นวิธีที่ดีที่สุด ถ้าคุณไม่สนใจรูปแบบที่มีอยู่ทั้งหมดนี้จะทำให้แน่ใจว่าหมายเลขนั้นถูกต้องเพียงบางส่วนและไม่ใช่การพูดไร้สาระ
mdance

7
คุณหมายถึงการจับคู่ (/ \ d / g) ไม่ตรง (/ \ d /) หรือความยาวจะเท่ากับ 1 ไม่ใช่ 10; นอกจากนี้การจับคู่สตริงที่ว่างเปล่าจะเป็นโมฆะ อย่างน้อยที่สุดควรเป็น var m = value.match (/ \ d / g); return m && m.length === 10
ดั๊ก

หรือreturn (value.match(/\d/g) || []).length == 10หรือง่ายมาก ( return value.replace(/\D/g,'').length == 10แต่มีข้อบกพร่องอย่างเท่าเทียมกัน):
RobG

/\D/gi.test(value)ฉันเช่นนี้: ทุกอย่างที่ไม่ใช่ตัวเลขรวมถึง whitespaces,
กัส

33

สิ่งที่ฉันจะทำคือละเว้นรูปแบบและตรวจสอบความถูกต้องของเนื้อหาตัวเลข:

var originalPhoneNumber = "415-555-1212";

function isValid(p) {
  var phoneRe = /^[2-9]\d{2}[2-9]\d{2}\d{4}$/;
  var digits = p.replace(/\D/g, "");
  return phoneRe.test(digits);
}

ยอมรับเกี่ยวกับการละเว้นการจัดรูปแบบซึ่งเป็นเรื่องปกติที่หมายเลขโทรศัพท์มือถือจะแสดงด้วยช่องว่างเช่น XXXX XXX XXX แต่สำหรับฟอร์มที่ต้องป้อนข้อมูลโดยไม่มีช่องว่างเช่น XXXXXXXXXXX
RobG

30
/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g

(123) 456-7890
+ (123) 456-7890
+ (123) -456-7890
+ (123) - 456-7890
+ (123) - 456-78-90
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725

นี่เป็นตัวเลือกที่หลวมมากและฉันชอบที่จะเก็บไว้ในลักษณะนี้ส่วนใหญ่ฉันใช้ในแบบฟอร์มการลงทะเบียนที่ผู้ใช้ต้องเพิ่มหมายเลขโทรศัพท์ของพวกเขา โดยทั่วไปผู้ใช้มีปัญหากับฟอร์มที่บังคับใช้กฎการจัดรูปแบบที่เข้มงวดฉันต้องการให้ผู้ใช้กรอกหมายเลขและรูปแบบในจอแสดงผลหรือก่อนบันทึกลงในฐานข้อมูล http://regexr.com/3c53v


3
regex แก้ไขเล็กน้อยเพื่ออนุญาตเช่นสำหรับ+41 (79) 123 45 67(สวิสเซอร์แลนด์):/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g
Remigius Stalder

อันนี้ดูเหมือนจะเหมาะสำหรับฉันเพราะมันไม่ได้เป็นสตริงเกินไปและดูเหมือนว่าจะครอบคลุมทุกรูปแบบสากล (และขอขอบคุณ @RemigiusStalder สำหรับการแก้ไขในสวิตเซอร์แลนด์)
Gavin

หากคุณมีแบ็กเอนด์ Java คุณสามารถเพิ่มการทำให้หมายเลขโทรศัพท์เป็นมาตรฐานได้เช่นจากgithub.com/google/libphonenumber
Remigius Stalder

29

REGEX ต่อไปนี้จะตรวจสอบรูปแบบใด ๆ เหล่านี้:

(123) 456-7890
123-456-7890
123.456.7890
1234567890

/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/

3
คุณต้องหลบหนี.มิฉะนั้นมันจะจับคู่กับตัวละครโดยพลการทำลาย regex ของคุณ
Christoph

1
สิ่งนี้ทำให้ฉันไปในทิศทางที่ถูกต้อง ขอบคุณ! น่าเสียดายที่นิพจน์นี้จะตรงกับ (1234567890 และ 123) 4567890 ^ ((([0-9] {3})) | ([0-9] {3})) [- \ s \.] [0-9] {3} [- \ s \.]? [0-9] {4} $ ดูแลปัญหาเล็กน้อยนั้น
Joe Hawkins

15

ฉันขอแนะนำให้ใช้สิ่งที่ชัดเจน (โดยเฉพาะอย่างยิ่งการคิดว่าใครจะต้องรักษารหัส) ... สิ่งที่เกี่ยวกับ:

var formats = "(999)999-9999|999-999-9999|9999999999";
var r = RegExp("^(" +
               formats
                 .replace(/([\(\)])/g, "\\$1")
                 .replace(/9/g,"\\d") +
               ")$");

ที่ regexp สร้างจากเทมเพลตชัดเจน? การเพิ่มใหม่จะไม่ใช่เรื่องง่ายและอาจเป็นลูกค้าเองก็สามารถทำได้ในหน้า "ตัวเลือก"


15

โดยที่ str อาจเป็นรูปแบบใด ๆ เหล่านี้: 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555

function telephoneCheck(str) {
  var isphone = /^(1\s|1|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/.test(str);
  alert(isphone);
}
telephoneCheck("1 555 555 5555");


regexp ที่ดีนั่นคือคำตอบที่ดีที่สุดสำหรับคำถามนี้
JoelBonetR

9

ลองอันนี้ - มันรวมถึงการตรวจสอบสำหรับรูปแบบสากลด้วย

/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g

regex นี้ตรวจสอบรูปแบบต่อไปนี้:

  • (541) 754-3010 ในประเทศ
  • + 1-541-754-3010 นานาชาติ
  • 1-541-754-3010 โทรออกในสหรัฐอเมริกา
  • 001-541-754-3010 โทรจากประเทศเยอรมนี
  • 191 541 754 3010 โทรจากฝรั่งเศส

6

/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/

แม้ว่าโพสต์นี้จะเก่า แต่ต้องการออกจากการดูแลของฉัน สิ่งเหล่านี้ได้รับการยอมรับ: 5555555555 555-555-5555 (555)555-5555 1 (555) 555-5555 1 555 555 5555 1 555-555-5555 1 (555) 555-5555

สิ่งเหล่านี้ไม่ได้รับการยอมรับ:

555-5555 -> เพื่อยอมรับการใช้นี้: ^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$

5555555 -> เพื่อยอมรับการใช้นี้: ^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$

1 555) 555-5555 123 ** & !! asdf # 55555555 (6505552368) 2 (757) 622-7382 0 (757) 622-7382 -1 (757) 622-7382 2 757 622-7382 10 (757) 622 -7382 27576227382 (275) 76227382 2 (757) 6227382 2 (757) 622-7382 (555) 5 (55) - 5555

นี่คือรหัสที่ฉันใช้:

function telephoneCheck(str) {
  var patt = new RegExp(/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/);
  return patt.test(str);
}

telephoneCheck("+1 555-555-5555");

ปัญหาเดียวของ regex นี้คือมันพิจารณาว่าถูกต้องสตริงโทรศัพท์ที่มีเพียงหนึ่ง ')' หรือเพียงหนึ่ง '(' (เช่น "(555-555-5555"))
happyZZR1400

5

สิ่งนี้จะได้ผล:

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/

?หมายถึงตัวละครที่กลุ่มก่อนหน้านี้ควรจะจับคู่ศูนย์หรือหนึ่งครั้ง กลุ่ม(-|\s)จะจับคู่อย่างใดอย่างหนึ่ง-หรือ|ตัวละคร เพิ่ม?หลังจากที่เกิดขึ้นที่สองของกลุ่มนี้ใน regex คุณช่วยให้คุณเพื่อให้ตรงกับลำดับของตัวเลข 10 ติดต่อกัน



2

คำตอบของทุกคนนั้นยอดเยี่ยม แต่นี่คือคำตอบที่ฉันคิดว่าครอบคลุมมากกว่านี้ ...

สิ่งนี้เขียนขึ้นสำหรับจาวาสคริปต์ที่ตรงกับการใช้หมายเลขเดียวในบรรทัดเดียว:

^(?!.*911.*\d{4})((\+?1[\/ ]?)?(?![\(\. -]?555.*)\( ?[2-9][0-9]{2} ?\) ?|(\+?1[\.\/ -])?[2-9][0-9]{2}[\.\/ -]?)(?!555.?01..)([2-9][0-9]{2})[\.\/ -]?([0-9]{4})$

หากคุณต้องการจับคู่ที่ขอบเขตของคำเพียงแค่เปลี่ยน ^ และ $ เป็น \ b

ฉันยินดีรับข้อเสนอแนะการแก้ไขหรือวิพากษ์วิจารณ์ของการแก้ปัญหานี้ เท่าที่ฉันสามารถบอกได้สิ่งนี้ตรงกับรูปแบบ NANP (สำหรับหมายเลขสหรัฐอเมริกา - ฉันไม่ได้ตรวจสอบประเทศอื่น ๆ ในอเมริกาเหนือเมื่อสร้างสิ่งนี้) หลีกเลี่ยงข้อผิดพลาด 911 (ไม่สามารถอยู่ในรหัสพื้นที่หรือรหัสภูมิภาค) กำจัด เฉพาะหมายเลข 555 ที่ไม่ถูกต้อง (รหัสภูมิภาคของ 555 ตามด้วย 01xx โดยที่ x = หมายเลขใด ๆ )


1

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/

?หมายถึงตัวละครที่กลุ่มก่อนหน้านี้ควรจะจับคู่ศูนย์หรือหนึ่งครั้ง กลุ่ม(-|\s)จะจับคู่อย่างใดอย่างหนึ่ง-หรือ|ตัวละคร


1

ฉันต้องยอมรับว่าการตรวจสอบหมายเลขโทรศัพท์เป็นเรื่องยาก สำหรับปัญหาเฉพาะนี้ฉันจะเปลี่ยน regex จาก

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)\d{4}$/

ถึง

/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/

เนื่องจากมีอีกหนึ่งองค์ประกอบที่ไม่จำเป็นเท่านั้นคือขีด / พื้นที่สุดท้าย


ฉันพยายามเพิ่มเกม Regex ของฉันขึ้นมาจริงๆ! ฉันกำลังตรวจสอบข้อเสนอแนะของคุณโดยใช้ "The Regex Coach" ฉันใช้ regex (()? \ d {3} ())? (- | \ s)? \ d {3} (- | \ s)? \ d {4} และสตริงเป้าหมาย (123) 456-7890 แต่ด้วยเหตุผลบางอย่างมันเป็นเพียงการคว้า 7 หลักสุดท้าย ความคิดใด ๆ
Aaron Hathaway

regex ใช่เป็นเพียงเล็กน้อยในสมอง ... และความอดทน ลองใช้แล้ว / ^ [(]? (\ d {3}) [)]? [- | \ s]? (\ d {3}) [- | \ s]? (\ d {4}) $ / the ส่วนแรกของ regex ที่เก่ากว่าทำได้ไม่ดีนัก: "(()? \ d {3} ())" (() วงเล็บกลางถูกมองว่าเป็นส่วนหนึ่งของไวยากรณ์ regex ไม่ใช่อักขระที่จะค้นหา
Luc Veronneau

1

หากคุณใช้บนแท็กอินพุตมากกว่ารหัสนี้จะช่วยคุณ ฉันเขียนรหัสนี้ด้วยตัวเองและฉันคิดว่านี่เป็นวิธีที่ดีมากที่จะใช้ในการป้อนข้อมูล แต่คุณสามารถเปลี่ยนได้โดยใช้รูปแบบของคุณ มันจะช่วยให้ผู้ใช้แก้ไขรูปแบบของพวกเขาในแท็กอินพุต

$("#phone").on('input', function() {  //this is use for every time input change.
        var inputValue = getInputValue(); //get value from input and make it usefull number
        var length = inputValue.length; //get lenth of input

        if (inputValue < 1000)
        {
            inputValue = '1('+inputValue;
        }else if (inputValue < 1000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, length);
        }else if (inputValue < 10000000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, length);
        }else
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, 10);
        }       
        $("#phone").val(inputValue); //correct value entered to your input.
        inputValue = getInputValue();//get value again, becuase it changed, this one using for changing color of input border
       if ((inputValue > 2000000000) && (inputValue < 9999999999))
      {
          $("#phone").css("border","black solid 1px");//if it is valid phone number than border will be black.
      }else
      {
          $("#phone").css("border","red solid 1px");//if it is invalid phone number than border will be red.
      }
  });

    function getInputValue() {
         var inputValue = $("#phone").val().replace(/\D/g,'');  //remove all non numeric character
        if (inputValue.charAt(0) == 1) // if first character is 1 than remove it.
        {
            var inputValue = inputValue.substring(1, inputValue.length);
        }
        return inputValue;
}

1

ต้องการเพิ่มโซลูชันเฉพาะสำหรับการเลือกหมายเลขโทรศัพท์ที่ไม่ใช่ท้องถิ่น (800 และ 900 ประเภท)

(\+?1[-.(\s]?|\()?(900|8(0|4|5|6|7|8)\3+)[)\s]?[-.\s]?\d{3}[-.\s]?\d{4}

1

reg ex นี้เหมาะสำหรับหมายเลขโทรศัพท์ระหว่างประเทศและหมายเลขโทรศัพท์มือถือหลายรูปแบบ

นี่คือนิพจน์ทั่วไป: / ^ (+ {1} \ d {2,3} \ s? [(] {1} \ d {1,3} [)] {1} \ s? \ d + | + \ d {2,3} \ s {1} \ D + | \ + D) {1} [\ s | -] \ + d ([\ s | -] \ + D) {1,2} $ /

นี่คือฟังก์ชั่น JavaScript

function isValidPhone(phoneNumber) {
    var found = phoneNumber.search(/^(\+{1}\d{2,3}\s?[(]{1}\d{1,3}[)]{1}\s?\d+|\+\d{2,3}\s{1}\d+|\d+){1}[\s|-]?\d+([\s|-]?\d+){1,2}$/);
    if(found > -1) {
        return true;
    }
    else {
        return false;
    }
}

สิ่งนี้ตรวจสอบรูปแบบต่อไปนี้:

+44 07988-825 465 (ด้วยเครื่องหมายยัติภังค์รวมกันแทนที่ช่องว่างยกเว้นว่าจะต้องเว้นวรรคตาม +44)

+44 (0) 7988-825 465 (เมื่อใช้เครื่องหมายยัติภังค์รวมกันแทนช่องว่างยกเว้นว่าไม่มีเครื่องหมายยัติภังค์อยู่ตรงหน้าหรือหลัง (0) และช่องว่างก่อนหรือหลัง (0) ไม่จำเป็นต้องมี)

123 456-789 0123 (รวมเครื่องหมายขีดคั่นแทนการเว้นวรรค)

123-123 123 (มีเครื่องหมายยัติภังค์รวมกันแทนที่ช่องว่าง)

123 123456 (พื้นที่สามารถถูกแทนที่ด้วยยัติภังค์)

1234567890

ไม่มีเว้นวรรคหรือยัติภังค์คู่สำหรับทุกรูปแบบ


1

ตรวจสอบหมายเลขโทรศัพท์ + ส่งคืนข้อมูลที่จัดรูปแบบ

function validTel(str){
  str = str.replace(/[^0-9]/g, '');
  var l = str.length;
  if(l<10) return ['error', 'Tel number length < 10'];
  
  var tel = '', num = str.substr(-7),
      code = str.substr(-10, 3),
      coCode = '';
  if(l>10) {
    coCode = '+' + str.substr(0, (l-10) );
  }
  tel = coCode +' ('+ code +') '+ num;
  
  return ['succes', tel];
}

console.log(validTel('+1 [223] 123.45.67'));


1

ลองนี้

/ ^ (\ + {0}) (\ d {0}) ([(] {1} \ d {1,3} [)] {0}) {0} (\ s? \ D + | \ + \ d {2,3} \ s {1} \ D + | \ + D) {1} [\ s | -] \ + d ([\ s | -] \ + D) {1,2} ( \ s) {0} $ / กรัม

รูปแบบที่ถูกต้อง

  • (123) 456-7890
  • (123)456-7890
  • 123-456-7890
  • 1234567890
  • +31636363634
  • +3 (123) 123-12-12
  • +3 (123) 123-12-12
  • +3 (123) 1231212
  • +3 (123) 12312123
  • +3 (123) 123 12 12
  • 075-63546725
  • +7910 120 54 54
  • 910 120 54 54
  • 8 999 999 99 99

https://regex101.com/r/QXAhGV/1


{1}ไม่มีประโยชน์ที่เขียนดีกว่า{0,} *เหตุใดจึงใช้กลุ่มการดักจับเหล่านี้ทั้งหมด พวกเขาชะลอกระบวนการ
โตโต้

มันไม่ดี เพราะคุณสามารถป้อนตัวเลขได้มากเท่าที่คุณต้องการ
Mohammad jawad Barati

1

ฟังก์ชั่นนี้ใช้งานได้ดีสำหรับเรา:

let isPhoneNumber = input => {

  try {
    let ISD_CODES = [93, 355, 213, 1684, 376, 244, 1264, 672, 1268, 54, 374, 297, 61, 43, 994, 1242, 973, 880, 1246, 375, 32, 501, 229, 1441, 975, 591, 387, 267, 55, 246, 1284, 673, 359, 226, 257, 855, 237, 1, 238, 1345, 236, 235, 56, 86, 61, 61, 57, 269, 682, 506, 385, 53, 599, 357, 420, 243, 45, 253, 1767, 1809, 1829, 1849, 670, 593, 20, 503, 240, 291, 372, 251, 500, 298, 679, 358, 33, 689, 241, 220, 995, 49, 233, 350, 30, 299, 1473, 1671, 502, 441481, 224, 245, 592, 509, 504, 852, 36, 354, 91, 62, 98, 964, 353, 441624, 972, 39, 225, 1876, 81, 441534, 962, 7, 254, 686, 383, 965, 996, 856, 371, 961, 266, 231, 218, 423, 370, 352, 853, 389, 261, 265, 60, 960, 223, 356, 692, 222, 230, 262, 52, 691, 373, 377, 976, 382, 1664, 212, 258, 95, 264, 674, 977, 31, 599, 687, 64, 505, 227, 234, 683, 850, 1670, 47, 968, 92, 680, 970, 507, 675, 595, 51, 63, 64, 48, 351, 1787, 1939, 974, 242, 262, 40, 7, 250, 590, 290, 1869, 1758, 590, 508, 1784, 685, 378, 239, 966, 221, 381, 248, 232, 65, 1721, 421, 386, 677, 252, 27, 82, 211, 34, 94, 249, 597, 47, 268, 46, 41, 963, 886, 992, 255, 66, 228, 690, 676, 1868, 216, 90, 993, 1649, 688, 1340, 256, 380, 971, 44, 1, 598, 998, 678, 379, 58, 84, 681, 212, 967, 260, 263],
      //extract numbers from string
      thenum = input.match(/[0-9]+/g).join(""),
      totalnums = thenum.length,
      last10Digits = parseInt(thenum) % 10000000000,
      ISDcode = thenum.substring(0, totalnums - 10);

    //phone numbers are generally of 8 to 16 digits
    if (totalnums >= 8 && totalnums <= 16) {
      if (ISDcode) {
        if (ISD_CODES.includes(parseInt(ISDcode))) {
          return true;
        } else {
          return false;
        }
      } else {
        return true;
      }
    }
  } catch (e) {}

  return false;
}

console.log(isPhoneNumber('91-9883208806'));


0

นิพจน์ทั่วไปอย่างง่าย: /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g

ลองดูรูปแบบหวังว่าจะได้ผล:
444-555-1234
f: 246.555.8888
m: 1235554567


โปรดจัดรูปแบบคำตอบของคุณ (ใช้ช่องว่างสี่ช่องเป็นเยื้องสำหรับการบล็อกรหัส) คำอธิบายรหัสของคุณจะเพิ่มคุณภาพ
Nander Speerstra

0
\\(?\d{3}\\)?([\-\s\.])?\d{3}\1?\d{4}

วิธีนี้จะตรวจสอบหมายเลขโทรศัพท์ของรูปแบบตัวแปร:

\\(?\d{3}\\)? ค้นหาตัวเลข 3 ตัวที่อยู่ในวงเล็บหรือไม่

([\-\s\.])? ค้นหาอักขระตัวคั่นเหล่านี้หรือไม่

\d{3} พบ 3 หลัก

\1ใช้ตัวคั่นที่จับคู่แรก - เพื่อให้แน่ใจว่าตัวคั่นนั้นเหมือนกัน ดังนั้น (000) 999-5555 จะไม่ตรวจสอบที่นี่เพราะมีช่องว่างและตัวคั่นเส้นประดังนั้นเพียงแค่ลบ "\ 1" และแทนที่ด้วยรูปแบบย่อยตัวคั่น (การทำเช่นนั้นจะตรวจสอบรูปแบบที่ไม่ได้มาตรฐาน) อย่างไรก็ตามคุณควรจัดรูปแบบเป็นนัยสำหรับการป้อนข้อมูลของผู้ใช้

\d{4} พบ 4 หลัก

ตรวจสอบ:

  • (000) 999 5555
  • (000) -999-5555
  • (000) .999.5555
  • (000) 999-5555
  • (000) 9995555
  • 000 999 5555
  • 000-999-5555
  • 000.999.5555
  • 0009995555

BTW นี้ใช้สำหรับ JavaScript ดังนั้นจึงเพิ่มเป็นสองเท่า


0

ลองใช้ฟังก์ชั่น js นี้ ผลตอบแทนจริงถ้ามันตรงกันและเท็จถ้ามันล้มเหลว อ้างอิง

function ValidatePhoneNumber(phone) {
        return /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/.test(phone);
}


0

เพียงละเว้นทุกอย่างยกเว้นตัวเลข

นี่คือสิ่งที่ฉันใช้:

// USA phones should contain at least 10 digits. For Ukrainian phones it's OK to have only 9 digits, without leading 0 and country code prefix: [+380] 88 888-88-88.
String.prototype.isValidPhone = function(digitsCount) {
  var str = this.trim().match(/\d/g);
  return str && str.length >= (digitsCount || 10); // default is at least 10 digits
}

-1

ลองนี้

/^[\+]?\d{2,}?[(]?\d{2,}[)]?[-\s\.]?\d{2,}?[-\s\.]?\d{2,}[-\s\.]?\d{0,9}$/im

รูปแบบที่ถูกต้อง:

  1. (123) 456-7890
  2. (123)456-7890
  3. 123-456-7890
  4. 123.456.7890
  5. 1234567890
  6. +31636363634
  7. +3 (123) 123-12-12
  8. +3 (123) 123-12-12
  9. +3 (123) 1231212
  10. +3 (123) 12312123
  11. 075-63546725

โปรดรวมคำอธิบายไว้ในคำตอบของคุณด้วย แม้ว่ามันอาจใช้งานได้ แต่ก็เป็นสิ่งสำคัญที่จะต้องอธิบายว่าทำไมและอย่างไรเพื่อให้มีข้อมูลที่สมบูรณ์และเกี่ยวข้อง ขอบคุณสำหรับการตอบรับ :)
Magix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.