หัวข้อ: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: Centrinos ที่ 07 กรกฎาคม 2011, 19:49:54 ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ
โทรศัพท์พื้นฐานของจีน อ้างถึง /^((\(?\d{3,4}\)?)|(\d{3,4}-)?)\d{7,8}$/ โทรศัพท์มือถือของจีน อ้างถึง /^(\+)?(86)?0?1\d{10}$/ มันทำงานยังไง อธิบายแบบละเอียดหน่อยนะครับ คือจะเอามาปรับใช้ แต่ยัง งง ๆ หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: smapan ที่ 07 กรกฎาคม 2011, 20:24:15 จองคิวรออ่าน :wanwan022:
หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: Centrinos ที่ 07 กรกฎาคม 2011, 20:54:58 ไม่มีคนมาตอบจริง ๆ เห้อออออ
เอาเป็นว่าตอนนี้ผมนั่งงมของโทรศัพท์มือถือจนได้ละ โดยการหาความยาวของเลขโทรศัพท์มือถือของจีนเข้าเทียบเอา แหล่งข้อมูลเทียบจาก อ้างถึง [url]http://www.bloggang.com/viewblog.php?id=bfr&date=01-11-2006&group=3&gblog=4[/url] โดยเอาตัวเลขนี้ 138 1797 6660 มาเทียบและก็ลองเขียน + รันสคริปดู นับดูแล้วตัวเลขมีทังหมด 11 ตัว อ้างถึง /^(\+)?(86)?0?1\d{10}$/ แต่สคริป "\d{10}" มันนับแค่ 10 ตัว โดยไม่เอาตัวเลข 1 มาด้วยจึงทำให้ผมจับจุดได้หลังจากงมมานาน เพราะฉนั้นเบอร์โทรศัพท์มือถือของไทยมี 9 ตัว เริ่มต้นด้วย 8 แล้วตามด้วยหมายเลข หลาย ๆ ท่านอาจจะงงว่าทำไมเริ่มด้วย 8 ผมก็งง ครับ :P เลยลองไล่ ๆ หาอ่านจากหลาย ๆ ที่ ผมขออนุญาติไม่อ้าง ref นะครับ เยอะจนจำไม่ได้ จริง ๆ แล้วการโทรทางไกลระหว่างประเทศจำเป็นว่าจะต้องกดรหัสประเทศ ตามด้วยรหัสพื้นที่ แต่ไทย กับจีน หรือหลาย ๆ ประเทศไม่รู้นะ เอาเป็นว่าผมรู้เฉพาะที่ผมหาข้อมูลแล้วกัน จะมีรหัสบ่งบอกเฉพาะว่าเป็นโทรศัพท์มือถือ อย่างจีนใช้เลข 1 ของไทยใช้เลข 8 จริง ๆ แล้วการโทรไปหมายเลขไหนก็ไม่ต้องกด 0 นำหน้าก็ได้ ขึ้นด้วย 8 ตามด้วยหมายเลขได้เลย ผมลองแล้วได้ผม เพื่อยืนยันการตอบกระทู้ของตัวเอง จะบ้าตาย ถามเองตอบเอง :wanwan016: ฉนั้นลบล้างความคิดเดิม ๆ ว่าโทรศัทพ์มือถือมีทั้งหมด 10 ตัวออกไปจากสมองให้หมด ให้คิดว่ามันมีแค่ 9 ตัว และ เลข 8 บอกให้เรารู้ว่าไอ้นี่มันคือมือถือ พอตัดเลข 8 ออกไป นั่นแหละคือหมายเลขโทรศัพท์มือถือที่แท้จริง ผมเลยลองเขียน regular expression ของมือถือใหม่ดังนี้ อ้างถึง /^(\+)?(66)?0?8\d{8}$/ เป็นอันว่าลองทดสอบแล้วได้ผลครับ สามารถกรอกข้อมูลได้ทั้ง +66812345678 และ 0812345678 สำหรับท่านที่อยากให้สามารถใส่ได้หลากหลายรูปแบบมากกว่านี้ลองนำไปปรับใช้ดูนะครับ ปล.ได้ความรู้ใหม่เพิ่มอยู่อย่างนึง โทรหาเบอร์บ้าน เบอร์มือถือ ไม่ต้องกด 0 ก็โทรออกได้เว้ย เอ่อ เดี๋ยวจะหาว่าผมรู้อยู่แล้ว ๆ มาถามทำไม ขอบอกตรง ๆ ครับ ไม่รู้จริง ๆ เพิ่งหา ๆ ลอง ๆ ทำ เพราะโดยส่วนตัวตอนเรียน regular expression ก็สอบตก หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: smapan ที่ 07 กรกฎาคม 2011, 21:00:11 ลองกดแล้ว ไม่กด 0 มันโทรไม่ติดอ่ะ :P
หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: Centrinos ที่ 07 กรกฎาคม 2011, 21:12:13 ลองกดแล้ว ไม่กด 0 มันโทรไม่ติดอ่ะ :P อ่อ ลืมบอก ผมลองเอา 12Call โทรออกนะ เครือข่ายอื่นยังไม่ได้ลอง หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: Centrinos ที่ 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: หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: dreamer ที่ 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 มันบอกแบบนั้น ผมลองแล้วก็ผ่านด้วย หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: Centrinos ที่ 26 สิงหาคม 2013, 21:40:13 ขออนุญาต ขุดเพื่อเพิ่มเติมข้อมูลนะครับ
จากเดิมตอนนี้ถาม และลองทำช่วงนั้นเบอร์โทรศัพท์มือถือ ยังมีขึ้นต้นเพียง 08 เท่านั้น แต่ตอนนี้เริ่มมี 09 โผล่มาอีกแล้ว เพราะฉนั้น regular expression ก็ต้องมีการเพิ่มเติมนิดหน่อยครับ จากเดิม โค๊ด: /^(\+)?(66)?0?8\d{8}$/ โค๊ด: /^(\+)?(66)?0?(8|9)\d{8}$/ เพื่อให้รองรับหมายเลขโทรศัพท์อยู่ในปัจจุบันครับ หากอนาคตมีการเปลี่ยนแปลงเข้ามาอีกก็เพิ่มเติมเองได้ในส่วน > (ตัวเลขที่ต้องการจะเพิ่ม|8|9) สำหรับโทรศัพท์บ้าน ขออนุญาตติดไว้ก่อน ยังไม่เคลียร์ครับ หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: khunzz ที่ 26 สิงหาคม 2013, 22:56:56 เข้ามาเอาความรู้ล้วน ๆ ^^
หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: Loki ที่ 26 สิงหาคม 2013, 23:44:00 เข้ามาดูเทพ :")
หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: 50kpm ที่ 26 สิงหาคม 2013, 23:47:57 +1 จขกท. โทษฐานถามเอง ตอบเอง
+1 คุณ dreamer ครับ เด๋วกลับมาอ่าน ความรู้ทั้งนั้น ^^ หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: pollpolball ที่ 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 เลย หัวข้อ: Re: ท่านที่เก่ง regular expression ช่วยอธิบายหน่อยครับ เริ่มหัวข้อโดย: Ozone ที่ 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 มันบอกแบบนั้น ผมลองแล้วก็ผ่านด้วย |