ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ  (อ่าน 39457 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
Centrinos
ก๊วนเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 227



ดูรายละเอียด เว็บไซต์
« เมื่อ: 07 กรกฎาคม 2011, 19:49:54 »

ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ

โทรศัพท์พื้นฐานของจีน
อ้างถึง
/^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

โทรศัพท์มือถือของจีน
อ้างถึง
/^(\+)?(86)?0?1\d{10}$/



มันทำงานยังไง อธิบายแบบละเอียดหน่อยนะครับ คือจะเอามาปรับใช้ แต่ยัง งง ๆ
« แก้ไขครั้งสุดท้าย: 07 กรกฎาคม 2011, 19:53:13 โดย Centrinos » บันทึกการเข้า

If your English does not matter. Please do not mincing on my profile. Ok?
smapan
Global Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 643
ออฟไลน์ ออฟไลน์

กระทู้: 8,272



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 07 กรกฎาคม 2011, 20:24:15 »

จองคิวรออ่าน  wanwan022
บันทึกการเข้า

จูมล่าโฮส สยามโฮสเว็บ modty.com
รวมที่พัก เช่ารายวัน ที่พักเช่ารายเดือนมากที่สุดแจ่มจริง
***Tel 083-757-1515 ติดปัญหา Joomla ตรงไหนรับปรึกษาฟรี โทรมาเถอะครับ ถ้าตอบได้ช่วยแน่นอน ไม่มีกั้ก. ***
Centrinos
ก๊วนเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 227



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 07 กรกฎาคม 2011, 20:54:58 »

ไม่มีคนมาตอบจริง ๆ เห้อออออ

เอาเป็นว่าตอนนี้ผมนั่งงมของโทรศัพท์มือถือจนได้ละ โดยการหาความยาวของเลขโทรศัพท์มือถือของจีนเข้าเทียบเอา

แหล่งข้อมูลเทียบจาก
อ้างถึง


โดยเอาตัวเลขนี้ 138 1797 6660 มาเทียบและก็ลองเขียน + รันสคริปดู

นับดูแล้วตัวเลขมีทังหมด 11 ตัว

อ้างถึง
/^(\+)?(86)?0?1\d{10}$/


แต่สคริป "\d{10}" มันนับแค่ 10 ตัว โดยไม่เอาตัวเลข 1 มาด้วยจึงทำให้ผมจับจุดได้หลังจากงมมานาน

เพราะฉนั้นเบอร์โทรศัพท์มือถือของไทยมี 9 ตัว เริ่มต้นด้วย 8 แล้วตามด้วยหมายเลข หลาย ๆ ท่านอาจจะงงว่าทำไมเริ่มด้วย 8 ผมก็งง ครับ Tongue

เลยลองไล่ ๆ หาอ่านจากหลาย ๆ ที่ ผมขออนุญาติไม่อ้าง ref นะครับ เยอะจนจำไม่ได้ จริง ๆ แล้วการโทรทางไกลระหว่างประเทศจำเป็นว่าจะต้องกดรหัสประเทศ ตามด้วยรหัสพื้นที่ แต่ไทย กับจีน หรือหลาย ๆ ประเทศไม่รู้นะ เอาเป็นว่าผมรู้เฉพาะที่ผมหาข้อมูลแล้วกัน จะมีรหัสบ่งบอกเฉพาะว่าเป็นโทรศัพท์มือถือ อย่างจีนใช้เลข 1 ของไทยใช้เลข 8 จริง ๆ แล้วการโทรไปหมายเลขไหนก็ไม่ต้องกด 0 นำหน้าก็ได้ ขึ้นด้วย 8 ตามด้วยหมายเลขได้เลย ผมลองแล้วได้ผม เพื่อยืนยันการตอบกระทู้ของตัวเอง จะบ้าตาย ถามเองตอบเอง wanwan016

ฉนั้นลบล้างความคิดเดิม ๆ ว่าโทรศัทพ์มือถือมีทั้งหมด 10 ตัวออกไปจากสมองให้หมด ให้คิดว่ามันมีแค่ 9 ตัว และ เลข 8 บอกให้เรารู้ว่าไอ้นี่มันคือมือถือ พอตัดเลข 8 ออกไป นั่นแหละคือหมายเลขโทรศัพท์มือถือที่แท้จริง

ผมเลยลองเขียน regular expression ของมือถือใหม่ดังนี้
อ้างถึง
/^(\+)?(66)?0?8\d{8}$/

เป็นอันว่าลองทดสอบแล้วได้ผลครับ
สามารถกรอกข้อมูลได้ทั้ง
+66812345678
และ
0812345678

สำหรับท่านที่อยากให้สามารถใส่ได้หลากหลายรูปแบบมากกว่านี้ลองนำไปปรับใช้ดูนะครับ

ปล.ได้ความรู้ใหม่เพิ่มอยู่อย่างนึง โทรหาเบอร์บ้าน เบอร์มือถือ ไม่ต้องกด 0 ก็โทรออกได้เว้ย

เอ่อ เดี๋ยวจะหาว่าผมรู้อยู่แล้ว ๆ มาถามทำไม ขอบอกตรง ๆ ครับ ไม่รู้จริง ๆ เพิ่งหา ๆ ลอง ๆ ทำ เพราะโดยส่วนตัวตอนเรียน regular expression ก็สอบตก
« แก้ไขครั้งสุดท้าย: 07 กรกฎาคม 2011, 20:56:41 โดย Centrinos » บันทึกการเข้า

If your English does not matter. Please do not mincing on my profile. Ok?
smapan
Global Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 643
ออฟไลน์ ออฟไลน์

กระทู้: 8,272



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 07 กรกฎาคม 2011, 21:00:11 »

ลองกดแล้ว ไม่กด 0 มันโทรไม่ติดอ่ะ  Tongue
บันทึกการเข้า

จูมล่าโฮส สยามโฮสเว็บ modty.com
รวมที่พัก เช่ารายวัน ที่พักเช่ารายเดือนมากที่สุดแจ่มจริง
***Tel 083-757-1515 ติดปัญหา Joomla ตรงไหนรับปรึกษาฟรี โทรมาเถอะครับ ถ้าตอบได้ช่วยแน่นอน ไม่มีกั้ก. ***
Centrinos
ก๊วนเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 227



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 07 กรกฎาคม 2011, 21:12:13 »

ลองกดแล้ว ไม่กด 0 มันโทรไม่ติดอ่ะ  Tongue

อ่อ ลืมบอก ผมลองเอา 12Call โทรออกนะ เครือข่ายอื่นยังไม่ได้ลอง
บันทึกการเข้า

If your English does not matter. Please do not mincing on my profile. Ok?
Centrinos
ก๊วนเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 227



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 07 กรกฎาคม 2011, 23:18:34 »

ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ

โทรศัพท์พื้นฐานของจีน
อ้างถึง
/^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
หมายถึง:
ข้อความ (String) ต้องขึ้นต้นด้วย /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
ระหว่าง 1.อักขระ ในวงเล็บ หรือ 2.อักขระ ในวงเล็บ มีหรือไม่มีก็ได้  /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
ไวยกรณ์ผิด Syntax Error จากตัวอักขระ - ควรจะเป็น \- หรือ ต้องไม่มี
1. วงเล็บเปิด 1 อักขระ มีหรือไม่มีก็ได้ /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
และตามด้วยตัวเลขใดๆ 3-4 อักขระ /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
ตามด้วยวงเล็บปิด 1 อักขระ มีหรือไม่มีก็ได้ /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

หรือ

2. ตัวเลขใดๆ 3-4 อักขระ มีหรือไม่มีก็ได้ /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/
ไวยกรณ์ผิด Syntax Error จากตัวอักขระ - ควรจะเป็น \- หรือ ต้องไม่มี

และ ตัวเลขใดๆ 7-8 อักขระ ท้ายสุดของข้อความ /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

โทรศัพท์มือถือของจีน
อ้างถึง
/^(\+)?(86)?0?1\d{10}$/

ขึ้นต้นข้อความ /^(\+)?(86)?0?1\d{10}$/
ด้วย เครื่องหมาย + 1 ตัว มีหรือไม่มีก็ไ้ด้ ^(\+)?(86)?0?1\d{10}$
ตามด้วย เลข 86 มีหรือไม่มีก็ไ้ด้ /^(\+)?(86)?0?1\d{10}$/
ตามด้วย เลข 0 มีหรือไม่มีก็ไ้ด้ /^(\+)?(86)?0?1\d{10}$/
ตามด้วย เลข 1 (ต้องมี 1 ตัว) /^(\+)?(86)?0?1\d{10}$/
และ ตัวเลขใดๆ 10 ตัว ท้ายสุดของข้อความ /^(\+)?(86)?0?1\d{10}$/

มันทำงานยังไง อธิบายแบบละเอียดหน่อยนะครับ คือจะเอามาปรับใช้ แต่ยัง งง ๆ

โอ้ววววว กระจ่างมากครับ +1 ให้เลย wanwan002
บันทึกการเข้า

If your English does not matter. Please do not mincing on my profile. Ok?
dreamer
คนรักเสียว
*

พลังน้ำใจ: 16
ออฟไลน์ ออฟไลน์

กระทู้: 134



ดูรายละเอียด
« ตอบ #6 เมื่อ: 09 กรกฎาคม 2011, 00:13:29 »

ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ

โทรศัพท์พื้นฐานของจีน
อ้างถึง
/^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

โทรศัพท์มือถือของจีน
อ้างถึง
/^(\+)?(86)?0?1\d{10}$/



มันทำงานยังไง อธิบายแบบละเอียดหน่อยนะครับ คือจะเอามาปรับใช้ แต่ยัง งง ๆ

วิธีแกะนะครับ

^ เป็นตัวบอกว่าเริ่มต้น เช่น ^5 หมายความต้องขึ้นต้นด้วยเลข 5
$ เป็นตัวบอกว่าสิ้นสุด เช่น  5$ หมายความว่าต้องลงท้ายด้วยเลข 5
? บอกว่า ตัวอักษรที่อยู่ข้างหน้า 1 ตัว จะมีหรือไม่มีก็ได้ เช่น X5? ประโยคที่เข้ากับเงื่อนไข อาจจะเป็น X5 หรือX ก็ได้
\d จะแทนตัวเลข 0-9 จำนวน 1 ตัว
\d{3} บอกว่าจะต้องมีตัวเลข 3 ตัว
\d{1,4} บอกว่าสามารถเป็นตัวเลขตั้งแต่ 1 ถึง 4 ตัว
+ จะแทนความหมายว่า ตั้งแต่หนึ่งตัวขึ้นไป เช่น 5+ หมายถึงประโยคนี้ต้องมีเลข 5 อย่างน้อย 1 ตัวคือ 5, 55,555 ก็ถูกหมด
\+ เมื่อมี \ มาอยู่ข้างหน้า หมายความว่า + จะเป็นเครื่องหมาย+ ธรรมดา ไม่ได้ทำงานอะไร
() จะเป็นการรวมตัวอักษร เช่น (789) หมายความ จะต้องมีตัวเลข 789 อยู่ด้วย , (789)? หมายความว่า จะมีตัวเลข 789 อยู่ด้วยหรือไม่ก็ได้ แต่ถ้ามี ก็ต้องมีครบทั้ง 3 ตัวจะมีแค่ 78 ก็ไม่ถูก
| จะแทนความหมายว่า หรือ เช่น (7|8|9) หมายความว่า จะเป็นเลข 7 หรือเลข 8 หรือเลข 9 ก็ได้ เช่น 70, 845, 9756 ก็ถูกต้องทั้งนั้น


-----
การวิเคราะห์
/^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

1. แบ่งออกเป็น 2 ส่วนก่อน /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)  และ  \d{7,8}$/
2. \d{7,8}$ หมายความตัวเลขด้านหลัง จะมีจำนวน 7 ถึง 8 ตัว
3.  /^((\(?\d{3,4}\)?)|(\d{3,4}-)?) มีข้อมูลอยู่ในวงเล็บ 2 ชุด คือ (\(?\d{3,4}\)?) และ  (\d{3,4}-) เชื่อมกันด้วย | ซึ่งแสดงว่า จะเป็นชุดใดก็ได้
4. (\(?\d{3,4}\)?) จะประกอบด้วย \(? หมายความว่า จะมี ( หรือไม่ก็ได้, \d{3,4} หมายความว่าจะต้องเป็นตัวเลข 3-4 ตัว  , \)? หมายความว่า จะมี ) หรือไม่ก็ได้
5. (\d{3,4}-) ประกอบด้วย \d{3,4} หมายความว่า ต้องเป็นตัวเลข 3 ถึง 4 ตัว, - จะต้องมีตเครื่องหมาย - ตามหลังตัวเลข 3 ถึง 4 ตัวข้างหน้าด้วย

สรุปตัวเลขที่ถูก pattern ได้ดังนี้
1231234567
12312345678
12341234567
123412345678
(1231234567
123)1234567
(123)1234567
(123412345678
1234)12345678
(1234)12345678
123-1234567
123-12345678
1234-1234567
1234-12345678

บางอันจะเห็นว่ามี ( หรือ ) แค่อย่างละอัน ไม่ได้เขียนผิดนะครับ pattern มันบอกแบบนั้น ผมลองแล้วก็ผ่านด้วย
« แก้ไขครั้งสุดท้าย: 09 กรกฎาคม 2011, 00:16:39 โดย dreamer » บันทึกการเข้า
Centrinos
ก๊วนเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 227



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 26 สิงหาคม 2013, 21:40:13 »

ขออนุญาต ขุดเพื่อเพิ่มเติมข้อมูลนะครับ

จากเดิมตอนนี้ถาม และลองทำช่วงนั้นเบอร์โทรศัพท์มือถือ ยังมีขึ้นต้นเพียง 08 เท่านั้น แต่ตอนนี้เริ่มมี 09 โผล่มาอีกแล้ว เพราะฉนั้น regular expression ก็ต้องมีการเพิ่มเติมนิดหน่อยครับ

จากเดิม
โค๊ด:
/^(\+)?(66)?0?8\d{8}$/
ต้องเปลี่ยนเป็น
โค๊ด:
/^(\+)?(66)?0?(8|9)\d{8}$/

เพื่อให้รองรับหมายเลขโทรศัพท์อยู่ในปัจจุบันครับ หากอนาคตมีการเปลี่ยนแปลงเข้ามาอีกก็เพิ่มเติมเองได้ในส่วน > (ตัวเลขที่ต้องการจะเพิ่ม|8|9)

สำหรับโทรศัพท์บ้าน ขออนุญาตติดไว้ก่อน ยังไม่เคลียร์ครับ
บันทึกการเข้า

If your English does not matter. Please do not mincing on my profile. Ok?
khunzz
ก๊วนเสียว
*

พลังน้ำใจ: 45
ออฟไลน์ ออฟไลน์

กระทู้: 222



ดูรายละเอียด
« ตอบ #8 เมื่อ: 26 สิงหาคม 2013, 22:56:56 »

เข้ามาเอาความรู้ล้วน ๆ ^^
บันทึกการเข้า

Loki
ก๊วนเสียว
*

พลังน้ำใจ: 66
ออฟไลน์ ออฟไลน์

กระทู้: 388



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 26 สิงหาคม 2013, 23:44:00 »

เข้ามาดูเทพ :")
บันทึกการเข้า

MovDB.co | Movies and Films Database
50kpm
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 239
ออฟไลน์ ออฟไลน์

กระทู้: 2,967



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 26 สิงหาคม 2013, 23:47:57 »

+1 จขกท. โทษฐานถามเอง ตอบเอง

+1 คุณ dreamer ครับ

เด๋วกลับมาอ่าน ความรู้ทั้งนั้น ^^
บันทึกการเข้า

pollpolball
ก๊วนเสียว
*

พลังน้ำใจ: 13
ออฟไลน์ ออฟไลน์

กระทู้: 231



ดูรายละเอียด เว็บไซต์
« ตอบ #11 เมื่อ: 27 สิงหาคม 2013, 04:27:54 »

ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ

โทรศัพท์พื้นฐานของจีน
อ้างถึง
/^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

โทรศัพท์มือถือของจีน
อ้างถึง
/^(\+)?(86)?0?1\d{10}$/



มันทำงานยังไง อธิบายแบบละเอียดหน่อยนะครับ คือจะเอามาปรับใช้ แต่ยัง งง ๆ

วิธีแกะนะครับ

^ เป็นตัวบอกว่าเริ่มต้น เช่น ^5 หมายความต้องขึ้นต้นด้วยเลข 5
$ เป็นตัวบอกว่าสิ้นสุด เช่น  5$ หมายความว่าต้องลงท้ายด้วยเลข 5
? บอกว่า ตัวอักษรที่อยู่ข้างหน้า 1 ตัว จะมีหรือไม่มีก็ได้ เช่น X5? ประโยคที่เข้ากับเงื่อนไข อาจจะเป็น X5 หรือX ก็ได้
\d จะแทนตัวเลข 0-9 จำนวน 1 ตัว
\d{3} บอกว่าจะต้องมีตัวเลข 3 ตัว
\d{1,4} บอกว่าสามารถเป็นตัวเลขตั้งแต่ 1 ถึง 4 ตัว
+ จะแทนความหมายว่า ตั้งแต่หนึ่งตัวขึ้นไป เช่น 5+ หมายถึงประโยคนี้ต้องมีเลข 5 อย่างน้อย 1 ตัวคือ 5, 55,555 ก็ถูกหมด
\+ เมื่อมี \ มาอยู่ข้างหน้า หมายความว่า + จะเป็นเครื่องหมาย+ ธรรมดา ไม่ได้ทำงานอะไร
() จะเป็นการรวมตัวอักษร เช่น (789) หมายความ จะต้องมีตัวเลข 789 อยู่ด้วย , (789)? หมายความว่า จะมีตัวเลข 789 อยู่ด้วยหรือไม่ก็ได้ แต่ถ้ามี ก็ต้องมีครบทั้ง 3 ตัวจะมีแค่ 78 ก็ไม่ถูก
| จะแทนความหมายว่า หรือ เช่น (7|8|9) หมายความว่า จะเป็นเลข 7 หรือเลข 8 หรือเลข 9 ก็ได้ เช่น 70, 845, 9756 ก็ถูกต้องทั้งนั้น


-----
การวิเคราะห์
/^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

1. แบ่งออกเป็น 2 ส่วนก่อน /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)  และ  \d{7,8}$/
2. \d{7,8}$ หมายความตัวเลขด้านหลัง จะมีจำนวน 7 ถึง 8 ตัว
3.  /^((\(?\d{3,4}\)?)|(\d{3,4}-)?) มีข้อมูลอยู่ในวงเล็บ 2 ชุด คือ (\(?\d{3,4}\)?) และ  (\d{3,4}-) เชื่อมกันด้วย | ซึ่งแสดงว่า จะเป็นชุดใดก็ได้
4. (\(?\d{3,4}\)?) จะประกอบด้วย \(? หมายความว่า จะมี ( หรือไม่ก็ได้, \d{3,4} หมายความว่าจะต้องเป็นตัวเลข 3-4 ตัว  , \)? หมายความว่า จะมี ) หรือไม่ก็ได้
5. (\d{3,4}-) ประกอบด้วย \d{3,4} หมายความว่า ต้องเป็นตัวเลข 3 ถึง 4 ตัว, - จะต้องมีตเครื่องหมาย - ตามหลังตัวเลข 3 ถึง 4 ตัวข้างหน้าด้วย

สรุปตัวเลขที่ถูก pattern ได้ดังนี้
1231234567
12312345678
12341234567
123412345678
(1231234567
123)1234567
(123)1234567
(123412345678
1234)12345678
(1234)12345678
123-1234567
123-12345678
1234-1234567
1234-12345678

บางอันจะเห็นว่ามี ( หรือ ) แค่อย่างละอัน ไม่ได้เขียนผิดนะครับ pattern มันบอกแบบนั้น ผมลองแล้วก็ผ่านด้วย


ต้องแบ่งให้เป็นสัดส่วนแบบนี้ครับผม +1 เลย
บันทึกการเข้า

Ozone
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 290
ออฟไลน์ ออฟไลน์

กระทู้: 1,519



ดูรายละเอียด เว็บไซต์
« ตอบ #12 เมื่อ: 27 สิงหาคม 2013, 06:48:18 »

ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ

โทรศัพท์พื้นฐานของจีน
อ้างถึง
/^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

โทรศัพท์มือถือของจีน
อ้างถึง
/^(\+)?(86)?0?1\d{10}$/
+1



มันทำงานยังไง อธิบายแบบละเอียดหน่อยนะครับ คือจะเอามาปรับใช้ แต่ยัง งง ๆ

วิธีแกะนะครับ

^ เป็นตัวบอกว่าเริ่มต้น เช่น ^5 หมายความต้องขึ้นต้นด้วยเลข 5
$ เป็นตัวบอกว่าสิ้นสุด เช่น  5$ หมายความว่าต้องลงท้ายด้วยเลข 5
? บอกว่า ตัวอักษรที่อยู่ข้างหน้า 1 ตัว จะมีหรือไม่มีก็ได้ เช่น X5? ประโยคที่เข้ากับเงื่อนไข อาจจะเป็น X5 หรือX ก็ได้
\d จะแทนตัวเลข 0-9 จำนวน 1 ตัว
\d{3} บอกว่าจะต้องมีตัวเลข 3 ตัว
\d{1,4} บอกว่าสามารถเป็นตัวเลขตั้งแต่ 1 ถึง 4 ตัว
+ จะแทนความหมายว่า ตั้งแต่หนึ่งตัวขึ้นไป เช่น 5+ หมายถึงประโยคนี้ต้องมีเลข 5 อย่างน้อย 1 ตัวคือ 5, 55,555 ก็ถูกหมด
\+ เมื่อมี \ มาอยู่ข้างหน้า หมายความว่า + จะเป็นเครื่องหมาย+ ธรรมดา ไม่ได้ทำงานอะไร
() จะเป็นการรวมตัวอักษร เช่น (789) หมายความ จะต้องมีตัวเลข 789 อยู่ด้วย , (789)? หมายความว่า จะมีตัวเลข 789 อยู่ด้วยหรือไม่ก็ได้ แต่ถ้ามี ก็ต้องมีครบทั้ง 3 ตัวจะมีแค่ 78 ก็ไม่ถูก
| จะแทนความหมายว่า หรือ เช่น (7|8|9) หมายความว่า จะเป็นเลข 7 หรือเลข 8 หรือเลข 9 ก็ได้ เช่น 70, 845, 9756 ก็ถูกต้องทั้งนั้น


-----
การวิเคราะห์
/^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/

1. แบ่งออกเป็น 2 ส่วนก่อน /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)  และ  \d{7,8}$/
2. \d{7,8}$ หมายความตัวเลขด้านหลัง จะมีจำนวน 7 ถึง 8 ตัว
3.  /^((\(?\d{3,4}\)?)|(\d{3,4}-)?) มีข้อมูลอยู่ในวงเล็บ 2 ชุด คือ (\(?\d{3,4}\)?) และ  (\d{3,4}-) เชื่อมกันด้วย | ซึ่งแสดงว่า จะเป็นชุดใดก็ได้
4. (\(?\d{3,4}\)?) จะประกอบด้วย \(? หมายความว่า จะมี ( หรือไม่ก็ได้, \d{3,4} หมายความว่าจะต้องเป็นตัวเลข 3-4 ตัว  , \)? หมายความว่า จะมี ) หรือไม่ก็ได้
5. (\d{3,4}-) ประกอบด้วย \d{3,4} หมายความว่า ต้องเป็นตัวเลข 3 ถึง 4 ตัว, - จะต้องมีตเครื่องหมาย - ตามหลังตัวเลข 3 ถึง 4 ตัวข้างหน้าด้วย

สรุปตัวเลขที่ถูก pattern ได้ดังนี้
1231234567
12312345678
12341234567
123412345678
(1231234567
123)1234567
(123)1234567
(123412345678
1234)12345678
(1234)12345678
123-1234567
123-12345678
1234-1234567
1234-12345678

บางอันจะเห็นว่ามี ( หรือ ) แค่อย่างละอัน ไม่ได้เขียนผิดนะครับ pattern มันบอกแบบนั้น ผมลองแล้วก็ผ่านด้วย

บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์