Regular Expression คืออะไร มารู้จักกับคำสั่ง Regular Expression กันดีกว่า
คำสั่ง Regular Expressions มีอยู่ในทุกภาษาแต่วันนี้จะมาแนะนำการเขียนและตัวอย่าง Regular Expressions ในภาษา php และ JavaScript กัน
เท่าที่แอดมินทำงานด้านการเขียนเว็บไซต์มา regular expression มีความสำคัญมากเว็บทุกเว็บที่แอดมินเขียนต้องเอา regular expression มาใช้แก้ปัญหาอยู่บ่อยครั้ง ถ้าเขียน regular expressionไม่เป็นคงจบงานส่งเว็บให้ลูกค้าไม่ได้แน่นอน!!!
Regular Expressions คืออะไร ? 🤔
Regular Expressions คือเงื่อนไขหรือรูปแบบ(pattern) ที่เรากำหนดขึ้นมาเพื่อค้นหาข้อความหรือตัวอักษรที่เราต้องการว่าตรงตามเงื่อนไขหรือรูปแบบ(pattern) ที่เรากำหนดไว้หรือไม่
Regular Expressions มีอยู่ในทุกภาษา Programming แต่จะคำสั่งในรัน Regular Expressions นั้นจะแตกต่างกันออกไป เช่น
ในภาษา JavaScript จะใช้คำสั่ง test รันคำสั่ง regular Expressions
//ค้นหาคำว่า football ใน string
var pattern = /football/;
pattern.test("The Thailand national football team");
/*
output >> true
*/
ในภาษา PHP คำสั่งที่เกี่ยวกับ Expressions อยู่หลายคำสั่ง เช่น preg_match
<?php
//ค้นหาคำว่า football ใน string
$pattern='/football/';
$str='The Thailand national football team';
preg_match($pattern, $str , $matches);
print_r($matches);
/*
output :
Array
(
[0] => football
)
*/
?>
ตัวอย่างการนำ Regular Expressions ไปใช้
- เช็คความถูกต้องในฟอร์มต่างๆ เช่น เช็คค่าว่าง เช็ค email, เช็คหมายเลขโทรศัพท์, เช็ค password ว่ามีทั้งตัวเลขและตัวอักษรหรือเปล่า เป็นต้น
- ค้นหาคำ ในหน้านั้นๆ หรือ Find & Replace ค้นหาและทำการเปลี่ยนแปลงค่า
- ป้องกันไม่ให้ผู้ใช้ป้อนคำต้องห้ามต่างๆ เช่น เช็คคำหยาบ
- ใช้เขียนเช็ครูปแบบ url ในไฟล์ .htaccess เป็นต้น ตัวอย่างการใช้ Regular Expressions ในไฟล์ htaccess https://httpd.apache.org/docs/2.4/rewrite/intro.html
สัญลักษณ์ | ความหมาย |
. | ตัวอักษรอะไรก็ได้ |
[ ] | bracket expression(เครื่องหมายก้ามปู) คือกลุ่มของตัวอักษรอักษรที่ต้องการตรวจสอบ สามารถใช้ – ช่วยในกรณีที่ต้องการระบุเป็นช่วงของตัวอักษรเช่น [a-zA-Z0-9] เป็นต้น |
[^ ] | ไม่เอาตัวอักษรใน bracket expression |
^ | ต้องขึ้นประโยคด้วยคำนี้ ห้ามมีอะไรนำหน้า ( ^ ที่อยู่ใน [] คนละความหมายกัน) |
$ | ต้องจบประโยคด้วยคำนี้ ห้ามมีอะไรต่อท้าย |
( ) | กลุ่มคำที่ตรงกับเงือนไข |
| | เงือนไขหรือ เช่น a|b คือตัวอักษร a หรือ b ก็ได้ |
สัญลักษณ์ | ความหมาย |
\w | ทุกๆ ตัวอักษรและ underscore |
\W | ที่ไม่ใช่ตัวอักษร |
\a | [A-Za-z] |
\s | ค้นหา whitespace(ช่องว่าง, tab, newline, carriage return, vertical tab) |
\_s | [ \t\r\n\v\f] (space กับ tab และ whitespace ทุกตัว) |
\S | ที่ไม่ใช่ whitespace |
\d | ตัวเลขทุกตัว |
\D | ที่ไม่ใช่ตัวเลข |
\l | [a-z] (lowercase character) |
\u | [A-Z] (uppercase character) |
\x | [A-Fa-f0-9] (Hexadecimal digits) |
สัญลักษณ์ | ความหมาย |
? | “มี ได้ 1 ตัว” หรือ “ไม่มี” ก็ได้ |
* | “มีกี่ตัวก็ได้” หรือ “ไม่มีก็ได้” |
+ | ต้องมีอย่างน้อย 1 ตัว |
{min,max} | ในปีกา{ } มีได้ตั้งแต่ min ตัวถึง max ตัว
|
สัญลักษณ์และความหมายฉบับภาษาอังกฤษดูได้จากลิงค์นี้เลย >>
การสร้าง Regular Expression
บทความนี้จะแนะนำการเขียน regular expressions ในภาษา javascript และ php 😁
Regular Expressions ในภาษา PHP คำสั่งที่มีการใช้บ่อยๆมีดังนี้
- preg_match_all()
- preg_match()
- preg_replace()
- preg_split()
flag ต่างๆ ที่สำคัญ เช่น
/i
: case sensitive เราสามารถกำหนดว่าจะหาข้อมูลแบบ case sensitive หรือไม่
Regular Expressions ในภาษา JavaScript
flag ต่างๆ ที่สำคัญ เช่น
/i
: case sensitive เราสามารถกำหนดว่าจะหาข้อมูลแบบ case sensitive หรือไม่/g
: global เพื่อให้ match ทั้งหมด ไม่เฉพาะตัวแรกเท่านั้น
การสร้าง Regular Expressions ใน JavaScript ทำได้ 2 แบบคือ
//
หรือ //g
(global)let re = /[abc]/;
re.test('a') // true
let re = new RegExp('[abc]');
re.test('a') // true
ต่อมาก็มีดูตัวอย่างการเขียน Regular Expressions กันเลย
ตัวอย่างที่ (1) เช็คว่ามีตัว "T" อยู่ในข้อความหรือเปล่า
php
preg_match('/T/', 'The Thailand national football team', $matches);
print_r($matches);
/*
Array
(
[0] => T
)
*/
JavaScript
var re = /T/;
re.test('thailand')
/*
output >> false
*/
var re = /T/i;
re.test('thailand')
/*
output >> true
*/
ตัวอย่างที่ (2) เช็คว่ามีตัวอย่างน้อย 1 ตัวอยู่ในข้อความหรือเปล่า โดย "." แทนตัวอักษร และ "+" มีค่าเท่ากับอย่างน้อย 1 ตัว
PHP
<?php
preg_match('/.+/','', $matches);
print_r($matches);
/*
output :
Array()
*/
preg_match('/.+/','test', $matches);
print_r($matches);
/*
output :
Array
(
[0] => test
)
*/
JavaScript
var re = /.+/;
re.test('');
/* output >> false */
var re = /.+/;
re.test('fgf');
/* output >> true */
ตัวอย่างที่ (2) รูปแบบของ Regular Expression : ^[0-9].{3,}
ความหมายคือข้อความต้องขึ้นต้นด้วยตัวเลขและตามด้วยตัวอักษรอย่างน้อย 3 ตัว
^ แทนความหมายว่า ขึ้นต้น
[0-9] แทนความหมายว่า ตัวเลข 0-9
. แทนความหมายว่า ตัวอักษรอะไรก็ได้
{3,} แทนความหมายว่า อย่างน้อย 3 ตัว
PHP
<?php
preg_match('/^[0-9].{3,}/','Regular Expression Tutorial', $matches);
print_r($matches);
/*
output :
Array
(
)
*/
preg_match('/^[0-9].{3,}/','1.Regular Expression Tutorial', $matches);
print_r($matches);
/*
output :
Array
(
[0] => 1.Regular Expression Tutorial
)
*/
JavaScript
var str = /^[0-9].{3,}/;
str.test('naruto vs sasuke');
//output >> false
var str = /^[0-9].{3,}/;
str.test('1.naruto vs sasuke');
//output >> true
ตัวอย่างที่ (3) รูปแบบของ Regular Expression : ^\D\s+(cc)$
ความหมายคือข้อความต้องไม่ขึ้นต้นด้วยตัวเลขจากนั้นต้องตามด้วยข่องว่างและตามด้วยตัว cc และลงท้ายตัว cc
^ แทนความหมายว่า ขึ้นต้น
\D แทนความหมายว่า ตัวเลข 0-9
\s แทนความหมายว่า ตัวอักษรอะไรก็ได้
(cc) แทนความหมายว่า ต้องมีตัวอักษร cc สองตัวติดกัน
$ แทนความหมายว่า ลงท้าย
PHP
<?php
preg_match('/^\D\s+(cc)$/','1.XXcc', $matches);
print_r($matches);
/*
output :
Array
(
)
*/
preg_match('/^\D\s+(cc)$/','XXcc', $matches);
print_r($matches);
/*
output :
Array
(
)
*/
preg_match('/^\D\s+(cc)$/','X cc', $matches);
print_r($matches);
/*
output :
Array
(
[0] => X cc
[1] => cc
)
*/
JavaScript
var str = /^\D/;
str.test('1.naruto vs sasuke');
//output >> false
var str = /^\D/;
str.test('naruto vs sasuke');
//output >> true
ตัวอย่างที่ (4) รูปแบบของ Regular Expression : ^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$
รูปแบบของ Regular Expression ใช้ในการเช็คชื่อ email ว่าถูกต้องหรือเปลา
รูปแบบของ Regular Expression ด้านบนหมายความว่า ต้องขึ้นต้นด้วยลุ่มของตัวอักษร a-z A-Z , ตัวเลข 0-9 ,_(underscore),หรือเครื่องหมาย -(ขีดกลาง) อย่างน้อย 1 ตัว แล้วตามด้วยตัวอักษร @ และตามด้วยกลุ่มของตัวอักษร a-z A-Z , ตัวเลข 0-9 ,_(underscore),หรือเครื่องหมาย -(ขีดกลาง) อย่างน้อย 1 ตัว แล้วตามด้วยเครื่องหมาย (.) และลงท้ายด้วยตัวอักษร a-z A-Z อย่างน้อย 2ตัว แต่ไม่เกิน 5 ตัว
*** เนื่องจากจุด "." เป็นสัญลักษณ์ใน Regular Expression ดังนั้นถ้าในข้อความเราต้องการเช็คว่ามีจุดหรือเปล่าต้องใช้เครื่องหมาย "\" นำหน้าเครื่องหมายจุด "."
PHP
<?php
preg_match('/^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/','text @gmail.com', $matches);
print_r($matches);
/*
output :
Array
(
)
*/
preg_match('/^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/','text@gmail.com', $matches);
print_r($matches);
/*
output :
Array
(
[0] => text@gmail.com
[1] => text
[2] => gmail
[3] => com
)
*/
JavaScript
var re = /^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/;
re.test('text @gmail.com');
//output >> false
var re = /^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/;
re.test('text@gmail.com');
//output >> true
แนะนำเว็บที่ใช้สำหรับทดสอบเขียน Regular Expression
แจก source code Regular Expression
สุดท้ายนี้ขอปิดท้ายด้วยการแจก function สำหรับภาษา php ที่มีการใช้ Regular Expression ร่วมด้วยลองเอาไปประยุกต์ใช้กันดูน่ะจ๊ะ
function get_attr_html($attr_name,$str){
@preg_match( '@'.$attr_name.'="([^"]+)"@' , $str, $match );
if(count($match)!=0){
return ($match[1]);
}else{
return '';
}
}
function parse_youtube_url($str)
{
preg_match("/(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $str, $matches);
$v_return='';
if(isset($matches[1]))
{
$v_return=$matches[1];
}
return $v_return;
}
function parse_vimeo_url($str)
{
preg_match("/https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/", $str, $matches);
$v_return='';
if(isset($matches[3]))
{
$v_return=$matches[3];
}
return $v_return;
}
สุดุท้ายนี้ก็ขอให้ทุกคนสนุกกับการเขียนโปรแกรมน่ะจ๊ะ...😘 บ๊ายบาย