หัวข้อ: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: UnzO ที่ 22 พฤศจิกายน 2007, 17:19:23 อยากจะให้เช็คว่าในข้อความมันมีภาษาไทยอยู่รึป่าวหน่ะครับ ขอแค่ ตัวอักษรในภาษาไทยแค่ตัวเดียว ก็พอแล้วครับ ผมเขียนแบบนี้ แต่มันเช็คไม่ได้ ก็งง เหมือนกันคับ
โค๊ด: ereg("[ก-๙]","$title") หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: EThaiZone ที่ 22 พฤศจิกายน 2007, 17:55:47 ใช้ [\xA1-\xF9] แทนครับ
หมายถึง ascii ตัวที่ 161 ถึง 249 (แต่นี้เป็นเลขฐาน 16 นะ) ดูอ้างอิงจาก Editplus ได้ครับ ยกตัวอย่างอันนี้ละกัน จากกระทู้คุณ joe อิๆ $var = '<img src="อยากได้ข้อมูลที่อยู่ตรงนี้"> <a href="อยากได้ข้อมูลddที่อยู่ตรงนี้"</a>'; preg_match_all('#[\xA1-\xF9]#', $var, $match); print_r($match); หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: UnzO ที่ 22 พฤศจิกายน 2007, 18:19:51 ขอบคุณมากคับ ทำได้แล้วคับ แต่มันก็มีปัญหาอีกเช่นกันคือ ในเนื้อหาที่ผมจะเช็คเนี้ย มันมีทั้ง ภาษา ญี่ปุ่น เกาหลี จีน และ ภาษาอื่นๆ ทั่วโลกครับ ทีนี้ปัญหามันก็คือ มันมองเห็นตัวหนังสืออื่นๆ ที่ไม่ใช่ ภาษาอังกฤษ เป็น จริงหมด ดูจาก Code นะครับ
โค๊ด: if(ereg("[\xA1-\xF9]","$title")){ คือถ้ามีภาษาอื่น ปนมา มันจะให้ค่า $status เป็น 1 หมดเลยครับ :P หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: EThaiZone ที่ 22 พฤศจิกายน 2007, 18:29:59 ถูกต้องครับ เป็นแบบนั้น เพราะมันเป็นการตรวจ Ascii ครับ
ตอนนี้ผมเองก็คิดได้ กำลังวิจัย (เรียกซะหรู) เกี่ยวกับการเช็คค่าในสภาพกรณีถ้ามาใช้ UTF-8 อยู่ครับ เพราะมันได้รับทุกภาษา แถมไม่มีการปนของอักษรด้วย (แต่ในเชิงลึก ปนกันนั่วเนีย 555+) กำลังคิดว่า อาจต้องเล่น มัลติไบต์ เล่นยากจริงๆ พับผ่าสิ ;D หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: EThaiZone ที่ 22 พฤศจิกายน 2007, 18:41:48 โย่ว วิจัยเสร็จ เอ้ย ค้นคว้า.. อะไรก็แล้วแต่ (ใกล้บ้า)
preg_match_all('#[ก-๙]#u', $var, $match); คือใช้ฟังค์ชั่นตระกูลที่รับ PCRE (ฟังค์ชั่นชื่อขึ้นต้นด้วย preg) วิธีคือ ทำใน editplus พิมพ์ภาษาไทยกะตัวเลขปกติ เซฟเป็น utf-8(สำคัญ) แล้วเวลาเขียน regex ต้องมี u ต่อท้ายตัว delimiter เพื่อให้รองรับ unicode เหมือนกับตัวอย่างต้องท้าย # (สำคัญ) เท่านี้ก็เสร็จโจร :) (วิธีหักดิบแบบบ้านๆ เหอๆ) หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: UnzO ที่ 22 พฤศจิกายน 2007, 23:46:55 เย้ ทำได้แล้วครับ ^^ ได้รับการช่วยเหลือจาก คุณ โจ้ EthaiZone ของเรานี้เอง ;D
เผื่อเพื่อนๆ อยากรู้นะคับ ผมจะเปิดโปงโค๊ด (พูดซ๊ะ 555) โค๊ด: if(preg_match("#[ก-๙]#u","$title")){ จากโค๊ดด้านบน จะได้ว่า ถ้า String ที่ตรวจสอบ มี ก-๙ คือ รวมทั้ง สระ ด้วย จะให้ค่าเป็นจริงทำวงเล็บแรก ถ้าไม่เช่นนั้น จะได้เป็นเท็จ ทำวงเล็บสอง ทั้งนี้ทั้งนั้น การตรวจสอบนี้ จะตรวจสอบจากค่าที่เป็น Encode แล้ว(ค่าที่คนมองเห็นแล้วรู้เรื่อง) คือ ไม่ได้ตรวจจากค่า ASCII(ค่าที่คนไม่รู้เรื่องแต่คอมอ่านออก) ดังนั้น ตัวหนังสือ จากภาษาอื่นๆ จะไม่เกี่ยว ปล. ผมเข้าใจตามนี้นะครับ ถ้าผมอธิบายผิด ก็ช่วยแก้ให้ด้วยน๊าคร๊าบบ ตอนนี้ก็ทำได้ตามที่คิดไว้แล้ว ยังไงก็ขอบคุณ คุณโจ้ อีกทีครับ :'( หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: Dr.K ที่ 22 พฤศจิกายน 2007, 23:51:29 ขอบคุณมากครับ ได้อะไรเนียนๆมาอีกแระ
;D หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: EThaiZone ที่ 23 พฤศจิกายน 2007, 00:39:00 หลักๆ จะอยู่ที่การเซฟชนิด encoding ของไฟล์นั้นๆ ด้วยครับ
อย่าลืมด้วย หุๆ :P หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: Tee++; ที่ 23 พฤศจิกายน 2007, 00:47:27 เออ เจ๋งๆ ความรู้ใหม่ เก็บๆ
หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: myong1 ที่ 23 พฤศจิกายน 2007, 11:20:06 เยี่ยมมากเลยครับ คุณ EThaiZone :)
หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: BosnoS ที่ 26 พฤศจิกายน 2007, 21:37:09 เย้ ทำได้แล้วครับ ^^ ได้รับการช่วยเหลือจาก คุณ โจ้ EthaiZone ของเรานี้เอง ;D เผื่อเพื่อนๆ อยากรู้นะคับ ผมจะเปิดโปงโค๊ด (พูดซ๊ะ 555) โค๊ด: if(preg_match("#[ก-๙]#u","$title")){ จากโค๊ดด้านบน จะได้ว่า ถ้า String ที่ตรวจสอบ มี ก-๙ คือ รวมทั้ง สระ ด้วย จะให้ค่าเป็นจริงทำวงเล็บแรก ถ้าไม่เช่นนั้น จะได้เป็นเท็จ ทำวงเล็บสอง ทั้งนี้ทั้งนั้น การตรวจสอบนี้ จะตรวจสอบจากค่าที่เป็น Encode แล้ว(ค่าที่คนมองเห็นแล้วรู้เรื่อง) คือ ไม่ได้ตรวจจากค่า ASCII(ค่าที่คนไม่รู้เรื่องแต่คอมอ่านออก) ดังนั้น ตัวหนังสือ จากภาษาอื่นๆ จะไม่เกี่ยว ปล. ผมเข้าใจตามนี้นะครับ ถ้าผมอธิบายผิด ก็ช่วยแก้ให้ด้วยน๊าคร๊าบบ ตอนนี้ก็ทำได้ตามที่คิดไว้แล้ว ยังไงก็ขอบคุณ คุณโจ้ อีกทีครับ :'( ลองทำแล้ว ไม่ว่าจะใส่ ไทย หรือ eng ออก $status ="1"; หมดเลย รู้สึกผมจะมีปัญหากับ editplus แน่ๆ เลย หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: BosnoS ที่ 26 พฤศจิกายน 2007, 22:23:34 สรุปแล้ว script ดีทุกอย่างเลย
ผมพลาดเอง ดันเอา ตัวแปล ไปผ่านคำสั่ง แปลงเป็น urlencode ผลลัพท์เลยเพี้ยน หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: hurahura ที่ 08 มีนาคม 2008, 19:15:06 ขอบคุณมากครับ มันยอดมากเลย
แล้วทีนี้ถ้าจะเช็คจำนวนตัวอักษร จะทำยังไงครับ ถ้าคำที่ใส่เข้ามามีทั้งภาษาไทยและอังกฤษ หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: ball6847 ที่ 08 มีนาคม 2008, 20:11:45 เ็ห็นพูดถึง regular expression กัน ตอนผมศึกษาเรื่องนี้อยู่ผมหาโน่นหานี่มาอ่านบานเลย (แต่ยังอ่านไปได้ไม่เท่าไหร่เองง่ะ)
แต่มีเล่มนึงผมว่ามีประโยชน์ เป็น Regular Expression Pocket Referrence เป็นคู่มืออ้างอิงของ Regex น่ะแหล่ะ แถมสำหรับหลายภาษาด้วย ลองเอาไปอ่านกันดูนะ และก็มีโปรแกรม Regex Buddy เป็นโปรแกรมที่ผมเอาไว้ทดลอง เวลาหัดใช้อ่ะ 2 อันนี้ผมแพ็ครวมกันไว้ให้แระ โหลดเอาโลด ประมาณ 8 เม็ก โค๊ด: http://upload.mthai.com/F1/47d29104d55e3 เรียนกันหนุกๆนะคับ หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: EThaiZone ที่ 10 มีนาคม 2008, 09:01:02 ขอบคุณมากครับ มันยอดมากเลย แล้วทีนี้ถ้าจะเช็คจำนวนตัวอักษร จะทำยังไงครับ ถ้าคำที่ใส่เข้ามามีทั้งภาษาไทยและอังกฤษ ไม่ใช้ strlen ล่ะครับ ?? หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: kudjung ที่ 12 มีนาคม 2008, 15:57:21 ถามต่อนะครับ ถ้าจะดึงข้อมูลที่อยู่ใน <body></body> ออกมาำไงครับ เพราะถ้าเจอบรรทัดใหม่มันก็ไม่ได้แล้วเช่น
<body>12345</body>อันนี้ดึงได้แต่ถ้า <body> 12345 </body> อันนี้ไม่ได้อะครับ หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: thenetxx ที่ 12 มีนาคม 2008, 16:34:02 โค๊ด: $txt = ' <body> ก็น่าจะพอมั้งคับ หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: ball6847 ที่ 12 มีนาคม 2008, 19:19:10 ถามต่อนะครับ ถ้าจะดึงข้อมูลที่อยู่ใน <body></body> ออกมาำไงครับ เพราะถ้าเจอบรรทัดใหม่มันก็ไม่ได้แล้วเช่น <body>12345</body>อันนี้ดึงได้แต่ถ้า <body> 12345 </body> อันนี้ไม่ได้อะครับ โค๊ด: <?php เติิม mode s เข้าไปเพื่อบอก PHP ให้นับเครื่องหมายจุด (.) กับบรรทัดใหม่ด้วย ปกติเครื่องหมายจุด . จะนับแค่ whitespace คับ แต่จะไม่นับ newline character (\n) ด้วย เติม s เข้าไปหลัง pattern ก็โอเคแล้วครับ หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: kudjung ที่ 12 มีนาคม 2008, 19:35:30 ถามต่อนะครับ ถ้าจะดึงข้อมูลที่อยู่ใน <body></body> ออกมาำไงครับ เพราะถ้าเจอบรรทัดใหม่มันก็ไม่ได้แล้วเช่น <body>12345</body>อันนี้ดึงได้แต่ถ้า <body> 12345 </body> อันนี้ไม่ได้อะครับ โค๊ด: <?php เติิม mode s เข้าไปเพื่อบอก PHP ให้นับเครื่องหมายจุด (.) กับบรรทัดใหม่ด้วย ปกติเครื่องหมายจุด . จะนับแค่ whitespace คับ แต่จะไม่นับ newline character (\n) ด้วย เติม s เข้าไปหลัง pattern ก็โอเคแล้วครับ โอ้ว เยี่ยมครับ ขอบคุณมากๆ เลย หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: hurahura ที่ 17 มีนาคม 2008, 16:46:06 ขอบคุณมากครับ มันยอดมากเลย แล้วทีนี้ถ้าจะเช็คจำนวนตัวอักษร จะทำยังไงครับ ถ้าคำที่ใส่เข้ามามีทั้งภาษาไทยและอังกฤษ ไม่ใช้ strlen ล่ะครับ ?? ถ้าเป็น ภาษาไทย UTF-8 มันนับ 3 อ่ะครับ แต่ทำได้ละครับ ให้แปลงไปเป็น tis620 ก่อน แล้วถึงหาจำนวนตัวอักษร แล้วค่อยแปลงกลับ โค๊ด: function utf8totis620($string) { ถ้ามีวิธีดีกว่านี้ แนะนำด้วยครับ ปล. โค้ดแปลงไปมาระหว่าง tis620 กับ utf8 เอามาจากในเน็ต แต่จำไม่ได้เอามาจากเว็บไหน แต่ใช้ได้ผล หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: ball6847 ที่ 17 มีนาคม 2008, 16:54:52 ขอบคุณมากครับ มันยอดมากเลย แล้วทีนี้ถ้าจะเช็คจำนวนตัวอักษร จะทำยังไงครับ ถ้าคำที่ใส่เข้ามามีทั้งภาษาไทยและอังกฤษ ไม่ใช้ strlen ล่ะครับ ?? ถ้าเป็น ภาษาไทย UTF-8 มันนับ 3 อ่ะครับ แต่ทำได้ละครับ ให้แปลงไปเป็น tis620 ก่อน แล้วถึงหาจำนวนตัวอักษร แล้วค่อยแปลงกลับ โค๊ด: function utf8totis620($string) { ถ้ามีวิธีดีกว่านี้ แนะนำด้วยครับ ปล. โค้ดแปลงไปมาระหว่าง tis620 กับ utf8 เอามาจากในเน็ต แต่จำไม่ได้เอามาจากเว็บไหน แต่ใช้ได้ผล ขอบคุงมากเลยง้าบ ผมกำลังอยากได้ แปลงไปแปลงกลับพอดีเลย เจอแต่แปลงไปไม่มีแปลงกลับ หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: thenetxx ที่ 17 มีนาคม 2008, 17:39:48 ขอบคุณมากครับ มันยอดมากเลย แล้วทีนี้ถ้าจะเช็คจำนวนตัวอักษร จะทำยังไงครับ ถ้าคำที่ใส่เข้ามามีทั้งภาษาไทยและอังกฤษ ไม่ใช้ strlen ล่ะครับ ?? ถ้าเป็น ภาษาไทย UTF-8 มันนับ 3 อ่ะครับ แต่ทำได้ละครับ ให้แปลงไปเป็น tis620 ก่อน แล้วถึงหาจำนวนตัวอักษร แล้วค่อยแปลงกลับ โค๊ด: function utf8totis620($string) { ถ้ามีวิธีดีกว่านี้ แนะนำด้วยครับ ปล. โค้ดแปลงไปมาระหว่าง tis620 กับ utf8 เอามาจากในเน็ต แต่จำไม่ได้เอามาจากเว็บไหน แต่ใช้ได้ผล ขอบคุงมากเลยง้าบ ผมกำลังอยากได้ แปลงไปแปลงกลับพอดีเลย เจอแต่แปลงไปไม่มีแปลงกลับ ^___^ ปกติ ใช้ iconv('utf-8','tis-620',$txt) หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: EThaiZone ที่ 17 มีนาคม 2008, 18:48:01 แง่ะ ที่กระทู้ PHP ผมก็เคยมีบอก :P
หัวข้อ: Re: เรื่อง Regular Expression ครับ ช่วยทีคร๊าบ เริ่มหัวข้อโดย: bombman ที่ 30 มกราคม 2009, 16:26:13 แจ่มมากครับ เด็ดมากๆ
|