วันอังคารที่ 23 กรกฎาคม พ.ศ. 2556

รู้จักวิธีใช้ val() ใน JQuery ให้คุ้ม


Method syntax : val

val()
คืนค่า attribute value ของ element ตัวแรกที่พบใน selector แต่ถ้ากรณี element เป็นรูปแบบ multi-select element จะคืนค่า value มาเป็น Array ใน Selection

Method ตัวนี้ค่อนข้างมีประโยชน์มาก ถ้าเราต้องการ value ของ wrapper หรือ element ตัวที่เราต้องการเช่น


<input id='specialtxt' type='text' size='50' value='50' />


เราต้องการ ค่า value ใน input type text นี้ ดึงโดย $('input:text#specialtxt').val() ค่าที่ได้ออกมา จะเท่ากับ 50


แต่ความพิเศษของ val ไม่ได้มีเพียงเท่านี้ยังสามารถใช้อย่างมีประสิทธิภาพกับ radio button อีกด้วย


val() กับ radio button


<input type='radio' name='radioGroup1' value='1' />radio1

<input type='radio' name='radioGroup1' value='2' checked='checked' />radio2
<input type='radio' name='radioGroup1' value='3' />radio3

จากโค้ดตัวอย่างเป็น กลุ่ม radio button แต่มีเพียง 1 ตัวเท่านั้นที่ถูก checked และ radio กลุ่มนี้เป็นกลุ่มเดียวกันดังนั้นในกลุ่มนี้จะสามารถ checked ได้แค่ตัวเดียวเท่านั้น

val สามารถช่วยเราดึงค่าใน radio ที่มีการถูก checked เท่านั้นออกมาได้

$("[name='radioGroup1']:checked").val()


ประโยคนี้จะทำให้คืนค่า value ของค่า radio ที่ถูก checked ไว้หรือเป็น undefined ถ้าไม่มีตัวไหนถูก checked การใช้ val นี้มีประโยชน์กว่าการที่เราจะต้องมา loop หา checked ของ element


val() กับ checkbox


แต่เพราะ val() จะสนใจเฉพาะ element ตัวแรกที่พบใน wrapper set เท่านั้น การทำแบบ radio button มาใช้ใน checkbox ไม่สามารถใช้ได้แน่นอน เพราะ checkbox สามารถถูก checked ได้หลายตัวในกลุ่ม แต่เราสามารถใช้ JQuery นี้แทนได้


var checkboxValues = $('[name="checkboxGroup"]:checked').map(

function(){return $(this).val();  }
).toArray();

ค่าที่เก็บใน checkboxValues นั้นจะได้เป็น Array ที่เก็บค่า value ของกลุ่ม checkbox ที่ถูก checked


การ set ค่า value ด้วย val()


val(value)
Parameter: String หรือ Function(ใน Function นี้มี parameter index กับ value)
Return : wrapped set


ตัวอย่าง การ set ค่าด้วย function


$('input:text.items').val(function( index, value ) {

  return value + ' ' + this.className;
});

การ set ค่า value ของ checkbox, select, radio


val(values)

เซ็ตค่าให้กับ checkboxs, radio button, หรือ option ของ <select> element โดยจะทำการ checked หรือ เลือก selected ถ้า value มีการ match ตรงกับ ค่าต่างที่ถูกส่งมาใน array
Parameter
values  เป็น Array ของ value ที่เราต้องการให้ elements ตัดสินใจว่าจะติ๊ก หรือเลือก
Return : wrapped set

ตัวอย่าง จาก script HTML ดังกล่าว มี checkbox 


<input type='checkbox' value='1' /> :1

<input type='checkbox' value='2' /> :2
<input type='checkbox' value='3' /> :3

<input type='checkbox' value='4' /> :4


กำหนดค่าให้ มีการ checked ให้กับ checkbox โดยใช้ val(values)

$(":checkbox").val(['1','3'])
$(":checkbox").val(['1','3'])

$(":checkbox").val(['1','3'])


โดย Mirror of Kagami


วันเสาร์ที่ 20 กรกฎาคม พ.ศ. 2556

หัดใช้ JQuery เริ่มต้น JQuery เริ่มยังไง (How to use JQuery thai language)



JQuery เป็น Library ของ Javascript เพิ่มความสะดวกสบายให้กับเราในการควบคุมหน้าเว็บ
วิธีติดตั้งเข้าไปที่ Path นี้

http://jquery.com/download/

เมื่อ Download มาแล้วจะได้ File มาตัวหนึง
การใช้งานถ้าต้องการให้หน้าเว็บไหนสามารถใช้งานได้ให้เพิ่ม Tag
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
ตรงส่วนของ
src เราต้องใส่ path ของ File ที่เรา Download มา
วิธีทดสอบการใช้งานง่ายๆ 
ลองเรียกใช้งานโดยใช้คำสั่ง ไว้ส่วนใดก็ได้ของหน้าเว็บเพจให้อยู่ใน
tag <head></head> หรือ <body></body>

$(document).ready(function(){
alert(1);
});

 จากนั้นลอง Run ด้วย Server ถ้าพบว่ามี Alert เลข 1 ขึ้นมาแสดงว่าใช้ได้แล้ว
การใช้งานเบื้องต้น
JQuery จะมีส่วนที่เรียกว่า Selector ซึ่งส่วนนี้จะติดกับสัญลักษณ์ $ แล้วความหมายของมันก็ตามชื่อเลย คือตัว Select
ลองสร้าง
Tag <input type='text' size='10'/> บนหน้าเว็บของคุณดูสิ จากนั้น
ลองทดสอบ JQuery 

 $(document),ready(function(){
 alert($("input:text").size());
});

ทดสอบ Run บน Browser ถ้าในหน้าเว็บเรามี input ที่เป็น text อยู่ตัวเดียวมันก็จะ Alert ขึ้นมา 1 ซึ่งหมายความว่ามัน Select 
พบ
Input ที่เป็นประเภท text พบ 1 ตัวในหน้าเว็บเรา
สิ่งที่ Select มาเป็นข้อมูลประเภทอะไร
JQuery เมื่อถูก Selector ดึงออกมาแล้วจะถูกเรียกเป็นข้อมูล ชนิด Wrapper (ถ้าเป็น Javascript จะเป็น Element) Wrapper
ถ้าพูดเอาตามคำแปลก็หมายถึงถูกห่ออยู่ เป็นอย่างที่คำแปลจริงๆ Wrapper คือ Element ของ Javascript ที่ทาง JQuery นำมาห่อบางสิ่งบางอย่าง
เพื่อให้การใช้งานที่ง่ายขึ้น เวลา
Select ออกมาได้หลายตัวเราเรียกว่า Wrapper set

Select แบบมีเงื่อนไข
ถ้าใน
Webpage เรามี

 <input id='text1' type='text' size='10'/> <input type='text' id='text2' size='10'/>

ถ้าเราจะเลือกเอา input ที่มีไอดี text1 ใน Jquery สิ่งที่แทนคำว่า id ให้ใช้ #
จริงๆใช้
id Select ได้เลือกเพราะในหน้า Web page นั้น id ห้ามมีซ้ำ แต่เพื่อเป็นการป้องกันไว้ก่อน ให้ใช้เงื่อนไขเยอะๆไว้

$('input:text#text1') หรือ $(':text#text1') หรือ $('#text1')
ทั้งสามแบบใช้ได้หมด แต่แนะนำแบบแรกมากกว่าเพราะปลอดภัย
Select แบบหลายเงื่อนไข
ถ้าใน
Webpage เรามี

 <input id='rad1' type='radio' value='1'/> Male<br>
<input type='radio' id='rad1' checked='checked' value='2'/> Famale<br>

สังเกตว่า ถ้าเป็น radio แล้ว id จะเหมือนกัน แล้วเราจะแยกแยะได้ยังไง คำตอบคือเราก็เพิ่มเงื่อนไข ถ้าเราต้องการตัวที่ checked

 $(":radio#rad1[checked='checked']")

ในวงเล็บสี่เหลี่ยมเป็นการเพิ่มเงื่อนไขของ properties ที่เราต้องการ สามารถเพิ่มเงื่อนไขได้หลายเงื่อนไขได้ไม่จำกัดเช่น

 $(":radio#rad1[checked='checked'][value='2']")

การ Select แบบลำดับความลึกของ Node

ถ้าใน Webpage เรามี

 <div class='require'><input type='text' size='10'/></div>
 <div class='require'><input type='text' size='10'/></div>
 <div id='2'><input type='text'></div> 

เราต้องการ input type text ที่มีอยู่แต่ใน div ที่ class เป็น require เท่านั้นสามารถทำได้ดังนี้

$("div.require input:text") 

เลือกสิ่งที่อยู่ใน div.require (JQuery ใช้ จุด แทนคำว่า Class,ใช้ # แทนคำว่า id)ที่เป็น input ประเภท text การ Select แบบนี้ ไม่ว่า input:text จะอยู่ลึกแค่ไหน  

 ก็จะถูกดึงออกมาควรระวังถ้าต้องให้เลือกเฉพาะ input ที่ต่อจาก tag Div โดยตรงให้ลองใช้

$("div.require>input:text")

 การ Selector แบบหลาย Selector รวมกันในครั้งเดียว
ถ้าใน
Webpage เราประกอบด้วยพวกนี้

 <div class='require' id='humanFate'><input type='text' id='text1' size='10'/></div>
<div class='require'><input type='text' id='text2' size='10'/></div>
 <div id='2'><input type='text'></div> 
 <div id='NTDSYSTEM'></div>  

ถ้าเราต้องการปิด โค้ดบรรทัดที่ 1 กับบรรทัดที่ 4 ไม่ให้ผู้ใช้มองเห็นสามารถ Select แบบรวม Selector ได้ดังนี้
จากปกติเราอาจต้องเขียนสองแบบ $("div.require#humanFate") กับ $("div#NTDSYSTEM") แต่ทั้งนี้เสียเวลาเรารวมกันได้โดย

$("div.require#humanFate,div#NTDSYSTEM")

ต้องการปิดไม่ให้ผู้ใช้เห็นใช้ hide()

$("div.require#humanFate,div#NTDSYSTEM").hide();

การ Selector แบบกำหนดแค่บางส่วนของชื่อ id 

<input type='button' id='btn1' value='ปุ่ม1'/>
<input type='button' id='btn1' value='ปุ่ม2'/>
<input type='button' id='activebtn' value='cancel'/>

ต้องการเลือก input ที่ id ขึ้นต้นด้วย btn (การที่กำหนดว่าขึ้นต้นใช้สัญลักษณ์ ^)

$("input:button[id^='btn']")

ต้องการเลือก input ที่ id มีบางส่วนเป็นคำว่า btn (การที่กำหนดว่าบางส่วนใช้สัญลักษณ์ *)

$("input:button[id*='btn']")

ต้องการเลือก input ที่ id มีลงท้ายเป็นคำว่า btn (การที่กำหนดว่าบางส่วนใช้สัญลักษณ์ $)

$("input:button[id$='btn']")

ทั้งหมดที่กล่าวมานี้เป็นแค่บางส่วนของ Selector ของ JQuery จริงๆมีเยอะมากจนอธิบายเป็นหนังสือเล่มๆได้เลย
 อ่านพื้นฐานเพิ่มเติมได้ที่ www.w3school.com เป็นเว็บที่แนะนำสำหรับพื้นฐาน ส่วน Advance ขึ้นไปแนะนำให้หาโหลด pdf
ที่เป็น textbook มาอ่านจะดีกว่า หรือสามารถติดตามใน blog ได้ตลอดเวลา

โดย Mirror of Kagami

วันศุกร์ที่ 12 กรกฎาคม พ.ศ. 2556

javascript Prototype Object คืออะไร

Object.prototype คืออะไร วิธีใช้งานอย่างไร

prototype constructor จะช่วยให้เราสามารถเพิ่ม properties และ method ใหม่ๆ ให้กับ object ได้ ในตัวอย่างนี้ จะใช้ Boolean() object

- เมื่อเรากำหนด property ใหม่ , object Boolean ทั้งหมด จะถูกสร้าง property และกำหนด value หรือค่า default ตามที่เรากำหนด
- เมื่อเรากำหนด method ใหม่ , object Boolean ทั้งหมด จะมี method นี้ทั้งหมด

จำไว้ว่า : Boolean.prototype ไม่สามารถใช้อ้างกับ boolean ที่ไม่ใช่แบบธรรมดาได้ สามารถใช้กับ Boolean แบบ object ได้อย่างเดียว
จำไว้ว่า : Prototype เป็น constructor ของ object ระดับ global ซึ่งจะส่งผลให้กับ JavaScript objects ทั้งหมด

<html>
<head>
<title></title>
<script type="text/javascript">
Boolean.prototype.weapon = "knife";
Boolean.prototype.DefendMode = function(){
if(this.valueOf()==true){
        this.rightHand = "shield";
        }else{
        this.rightHand = "sword";
        }
      
}
function myFunction(){
var n = new Boolean(true);
n.DefendMode();
var x=document.getElementById("demo");
x.innerHTML = "RightHand : "+n.rightHand;
}
</script>
</head>
<body>

<p id="demo">Click the button, and display "Shield" if the Boolean is <em>true</em>, otherwise display "sword".</p>

<button onclick="myFunction()">Defend Mode</button>



</body>
</html>

การใช้ Prototype นิยมใช้พัฒนาสำหรับทำงานในส่วนของงานตัวเอง เช่นสร้าง Framework ขึ้นมาใช้งานเอง หรือเขียน Script ขึ้นมาใช้งานเอง ตัวอย่างที่เห็นทั่วๆไปที่นำมาใช้ที่โด่งดังปัจจุบัน ได้แก่ JQuery, DOJO

การตรวจสอบ Browser ของผู้ใช้ด้วย javascript

การใช้ userAgent ดึงข้อมูลจาก Browser เพื่อตรวจสอบ Browser
var mybrowser=navigator.userAgent; 
    if(mybrowser.indexOf('MSIE')>0){ 
        alert("IE"); 
    } 
    if(mybrowser.indexOf('Firefox')>0){ 
        alert("Firefox"); 
    }    
    if(mybrowser.indexOf('Presto')>0){ 
        alert("Opera"); 
    }            
    if(mybrowser.indexOf('Chrome')>0){ 
        alert("Chrome"); 
    }

การตรวจแบบนี้สามารถ เช็คได้ ระดับหนึง ความปลอดภัยที่สูงกว่านี้ ให้ตรวจสอบที่ฝั่ง Server ดีที่สุด (javascript ทำงานที่ฝั่ง Browser)

HTML ใช้ Checkbox, Radiobox ให้คุ้มกับ feature




หลังจากไม่ได้เขียน Blog ซะนาน เนื่องจากงานที่บริษัทเยอะมาก วันนี้มาเสนอ
สิ่งง่ายๆ

Checkbox







HTML เขียนง่ายๆได้แบบนี้

<input type="checkbox" name="vehicle" value="Bike">I have a bike
<input type="checkbox" name="vehicle" value="Car">I have a car

แต่แค่นี้ ผู้ใช้ก็ยังใช้ยากอยู่ เพราะจะต้องเล็งให้เป๊ะ คลิกให้ตรงช่อง เราต้องการให้คลิกที่ข้อความแล้วให้ checkbox ทำงานด้วยทำได้ดังนี้
 1. เพิ่ม Id ให้ input ก่อน

<input type="checkbox" name="vehicle" id="vehicle1" value="Bike">I have a bike
<input type="checkbox" name="vehicle" id="vehicle2" value="Car">I have a car

2.ให้ข้อความเก็บในแท็ก Label

<input type="checkbox" name="vehicle" id="vehicle1" value="Bike"><label>I have a bike</label>
<input type="checkbox" name="vehicle" id="vehicle2" value="Car"><label>I have a car</label>

3. ใช้ property ที่ชื่อว่า for อ้างอิงว่าถ้ากดแล้วให้ทำงาน checkbox ที่กำหนดตาม id

<input type="checkbox" name="vehicle" id="vehicle1" value="Bike"><label for='vehicle1'>I have a bike</label>
<input type="checkbox" name="vehicle" id="vehicle2" value="Car"><label for='vehicle2'>I have a car</label>

ที่นี้เมื่อคลิกที่ข้อความ Checkbox ก็จะทำงานด้วย

สำหรับ Radio
ไม่ต้องใช้ property for ให้เอาแท๊ก label ครอบแท็ก Radio ไปได้เลยเช่น
<label>I have a Bike<input type='radio' id='radio1' value='Bike'/></label> 

เห็นแล้วแบบนี้ Radio นี่ค่อนข้างจัดการได้ง่ายมาก
ขอบคุณข้อมูลจาก http://www.w3schools.com

วันพุธที่ 10 กรกฎาคม พ.ศ. 2556

วิธี Clone Object มาใช้งานใน ภาษา Java

โดยปกติ Java จะไม่ยินยอมให้ทำการ Clone Object เราสามารถกำหนด Object ของเราให้สามารถ Clone ได้โดยทำการ implement Cloneable 



ใน Class ให้เพิ่ม Method สำหรับคืนค่าตัว Clone ประจำ Class ถ้าเป็น Entity ใน EJB ก็ใส่ @Transient ลงไปด้วย


วิธีเรียกใช้





สงสัยไหมว่า $(document).ready VS window.onload มันต่างกันอย่างไร


 คนเคยใช้ก็อาจจะสงสัยว่า $(document).ready VS window.onload มันต่างกันอย่างไร
    สำหรับผู้ใช้ javascript ที่ต้องการทำงานกับโดยดึงค่า HTML document มาใช้งาน ซึ่งจะต้องทำงานโดยให้ HTML document โหลดเสร็จเสียก่อนจึงทำงานได้
    ให้ HTML document ทุกอย่างโหลดเสร็จจึงค่อยทำงาน Script สามารถเขียนได้โดยให้อยู่ EVENT onload ใน javascript

    ใน JQuery ก็มีเช่นกันใช้ $(document).ready ได้เหมือนกัน

    แล้วมันต่างกันยังไงกัน ?

Onload ที่เป็น Event เป็นมาตราฐานใน DOM(Document Object Model) แต่ ready เป็น Event ที่เกิดมาเฉพาะใน jQuery เท่านั้น ซึ่งจุดประสงค์ของ ready จะทำงานก่อนในสภาวะที่เป็นไปได้หลังจาก document โหลดเสร็จดังนั้น code ที่ถูกใส่ให้ทำงาน Function เข้าไปใน Element ในหน้าเว็บเพจจะไม่ต้องรอการโหลดทั้งหมดลง แตกต่างจาก Onload จะทำงานหลังจากนั้น Onload จะรอจนกระทั่งทุกๆ Content ของเว็บเพจโหลดเสร็จ (เช่น images)
    แน่นอนว่า Event ที่เป็น Ready จะต้องทำงานก่อน Onload แน่นอน

ทดสอบด้วย Script ดังนี้ เมื่อ Run พบว่าจะเด้งแบบภาพต่อไปนี้



 ต่อจากนั้น
















Source Code:
<script type="text/javascript">
window.onload=function(){
alert("window onload");

};
$(document).ready(function(){
alert("document.ready");

});
</script>

เขียนโดย ธนดิตถ์ บุตร์หงษ์ , Thanadit Buthong,heaven-front@hotmail.com,Mirror of Kagami
อ้างอิงข้อมูลโดย w3school และอื่นๆ

javascript ค้นหา กรองข้อมูลให้มีประสิทธิภาพด้วย Regular Expression

ดูตัวอย่างสั้นๆเพื่อเอาไปใช้งานได้รวดเร็วคลิก
Regular Expression
มักใช้สำหรับ Search ,Replace , และ Filter ข้อมูลที่เป็น String ตัวอย่างเช่น การตรวจสอบ E-mail ใน input text ว่าผู้ใช้กรอกข้อมูลถูกต้องหรือไม่ ตัวอย่างที่จะมาสาธิตให้ดูเป็นภาษา javascript

Pattern เป็นรูปแบบ Regular Expression ที่เรากำหนด
Modifier เป็นเงื่อนไขการตรวจสอบของ Regular Expression

ตัวอย่างการใช้งานเบื้องต้น Regular Expression มี String อยู่ 3 ชุด
ชุดที่ 1 This is bat
ชุดที่ 2 This is hat
ชุดที่ 3 bat is animal
ต้องการตรวจสอบว่าประเภทชุดไหนบ้างที่มีคำว่า bat ไม่สนใจตัวใหญ่เล็กของตัวอักษรด้วย สามารถใช้ Regular Expression ด้วย javascript ได้ว่า
//เก็บข้อมูล 3 ชุด
var str = new Array();
str[0] = “This is bat”;
str[1]=”This is hat”;
str[2] = “bat is animal”
//กำหนด Regular Expression กรณี ไม่สนใจตัวใหญ่ตัวเล็กให้ใช้ Modifier เป็น i
var batPatt = /bat/i;
//วนลูปตรวจสอบ
for(var i=0;i<str.length;i++){
document.write(i+" "+batPatt.test(str[i])+",");
}
จะได้ output ออกทางหน้าจอว่า
0 true,1 false,2 true,
แสดงว่า Array ช่องที่ 0 และ 2 มีคำว่า bat
การใช้งาน Regular Expression เงื่อนไขเพิ่มเติมโดยดูจากรายละเอียดตามตารางต่อไปนี้


ตัวอย่าง  1:
มีข้อมูล M062_PAGE2, M054_PAGE3,  M065_PAGE1,F011_PAGE1, M073_PAGE2, F003_PAGE2,AF01_PAGE4
ต้องการกรองข้อมูลให้เหลือแต่ประเภทที่ขึ้นต้นด้วย M เท่านั้น คำตอบต้องได้
M062_PAGE2, M054_PAGE3, M065_PAGE1, M073_PAGE2 เท่านั้น สามารถเขียน Regular Expression ตาม Step ได้ดังนี้
เขียนรูปแบบ Pattern เบี้องต้นมาก่อน
var patt = //;
ข้อมูลขึ้นต้นด้วย M ใช้ ^
var patt = /^M/
แล้วต่อด้วยเลข 0-9 จำนวน 3 หลัก ใช้ [0-9] จำนวน{3}
var patt = /^M[0-9]{3}/
ตามด้วย _ underscore และคำว่า PAGE
var patt = /^M[0-9]{3}_PAGE/
แล้วต่อด้วยเลขหน้า PAGE ที่เป็น 0-9 จำนวน 1 หลักขึ้นไป ใช้ {1,}
var patt = /^M[0-9]{3}_PAGE[0-9]{1,}/

ตัวอย่างที่ 2 : มีข้อมูลใน Array str2 ดังนี้
var str2 = new Array();
str2[0] = "hotmail.com";
str2[1]= "google.co.th";
str2[2] = "3gpass.com";
str2[3] = "anything.co.th.cb";
str2[4] = "11.144.34.1";
str2[5] = "123.com.co";
str2[6] = "aga12.com.th";
ต้องกรองให้เหลือแต่ข้อมูลเว็บไซค์ hotmail.com, google.co.th, aga12.com.th
วิเคราะห์ได้ว่า
1.ห้ามขึ้นต้นด้วยตัวเลข แต่ตามด้วยตัวเลขได้
2.สามารถมีประโยคจำพวก .com หรือ .co ได้  1 – 2 ครั้ง แต่อย่างต่ำต้องมี เช่น hotmail.com
3.ข้อมูลหลังจุดจำพวก .com มีตัวอักษรได้น้อยสุด 2 มากสุด 3 เช่น .co กับ .com
เมื่อวิเคราะห์แล้วทำตามสเตปได้ดังนี้
เขียนรูปแบบ Pattern เบี้องต้นมาก่อน
var patt = //;
ข้อมูลขึ้นต้นด้วยตัวอักษรเท่านั้น ถึงแม้จะมี 1 ตัวก็ต้องเป็นตัวอักษรขึ้นต้นไว้ก่อน
กำหนดการขึ้นต้นด้วย ^ และกำหนดตัวอักษรด้วย [a-zA-Z] อย่างน้อย 1 ตัวใช้ {1}
var patt = /^[a-zA-Z]{1}/
นอกนั้นจะตามด้วยเลขก็ไม่เกี่ยง ตัวอักษรก็ไม่เป็นไรใช้ \w อ้างอิงถึงตัวอักษรและตัวเลข แต่ตัวเลขหรือตัวอักษรนี้จะมีหรือไม่มีก็ได้ ใช้ * เป็นตัวกำหนด
var patt = /^[a-zA-Z]{1}\w*/
ต่อจากนั้นต้องตามด้วย จุด ก่อนประโยคพวก .com
var patt = /^[a-zA-Z]{1}\w*\./
และตามด้วยประโยค com หรือco ซึ่งต้องมีตัวอักษรขั้นต่ำ 2 ตัวสูงสุด 3 ใช้
[a-zA-Z]{2,3} เพื่อกำหนดจำนวนตัวอักษรหลังจุด
var patt = /^[a-zA-Z]{1}\w*\.[a-zA-Z]{2,3}/
หลังจากนั้นจะมีประโยคพวก .com หรือ .co จะมีหรือไม่มีก็ได้ โดยเงื่อนไขเหมือนกับก่อนหน้านี้คือ \.[a-zA-Z]{2,3} จัดเป็นกลุ่มโดยใช้วงเล็บ (\.[a-zA-Z]{2,3}) กำหนดว่ามีหรือไม่มีก็ได้ หรือถ้ามีให้มีได้แค่ หนึ่ง เท่านั้น ใช้ ? เราจัดเงื่อนไขเป็นกลุ่มไว้เพื่อให้ ? กำหนดทั้งกลุ่มเงื่อนไขนั้น ได้ว่า  (\.[a-zA-Z]{2,3})? ซึ่งก็คือประโยค  (\.[a-zA-Z]{2,3}) จะมีหรือไม่มีก็ได้ แต่ถ้ามีมีได้แค่หนึ่ง กำหนดลอง pattern ได้ดังนี้
var patt = /^[a-zA-Z]{1}\w*\.[a-zA-Z]{2,3}(\.[a-zA-Z]{2,3})?/
เราต้องการให้เงื่อนไขเราตรวจสอบเป๊ะๆทั้งหัวและท้าย หัวเราใช้ ^ ไปแล้ว ท้ายให้เราใช้ $ เพื่อกำหนดว่า หลังจาก $ ห้ามมีอย่างอื่นอีก เพราะตรงนี้คือท้ายประโยคแล้ว
var patt = /^[a-zA-Z]{1}\w*\.[a-zA-Z]{2,3}(\.[a-zA-Z]{2,3})?$/;
เสร็จสมบูรณ์ให้ลองทดสอบดู

การแทนข้อความด้วย Regular Expression
การแทนข้อความเราใช้ฟังก์ชั่น String Replace โดยพารามิเตอร์เป็น Regular Expression
ก่อนหน้านั้นมาดูการใช้ฟังก์ชัน String Replace คร่าวๆก่อน



String Replace ไว้สำหรับแทนข้อความที่กำหนด ใช้ Regular Expression

ทดสอบ String Replace และเปรียบเทียบ Modifier หลายคงสงสัยกันว่า แต่ละ Modifier ของ Regular Expression มันต่างกันอย่างไร
- Global (ที่เติม g) หมายถึงเมื่อพบข้อความที่กำหนดแล้วให้หาให้หมดทั้ง string นั้น
- case-insensitive (ที่เติม i) หมายถึงไม่สนใจว่าตัวอักษรจะใหญ่หรือเล็ก เช่น  A กับ a คือตัวเดียวกัน
Modifier สามารถใช้ผสมกันได้
ตัวอย่าง เรากำหนดรูปแบบ Regular Expression ต่างกัน 4 แบบ
//Regular Expression ตรวจจับว่า คำไหนที่ขึ้นต้นด้วยอักษร h ซึ่งตัวตรงกลางที่เป็นจุดเป็นตัวอะไรก็ได้ จากนั้นตามด้วย t ให้ Regular Expression ค้นหา
var regExp = /h.t/;
var regExpGlobal = /h.t/g;
var regExpInsen = /h.t/i;
var regExpGlobalInsen = /h.t/gi;
//String ตัวอย่าง
var str = "I have a Hat that hat have been shadow and hut when pot hotting";
document.write(str+"<br/>");
document.write("default -> "+str.replace(regExp,"***")+"<br/>");
document.write("global -> "+str.replace(regExpGlobal,"***")+"<br/>");
document.write("case-insensitive -> "+str.replace(regExpInsen,"***")+"<br/>");
document.write("global and case-insensitive -> "+str.replace(regExpGlobalInsen,"***")+"<br/>");
ผลลัพธ์ออกทางหน้าจอ

เห็นว่าการใช้ default จะยังเห็นตัวใหญ่ตัวเล็กต่างกันอยู่ การใช้ Global จะตรวจจับทั้งข้อความหมดประโยค case-insensitive ไม่สนใจตัวใหญ่เล็ก Hat เลยโดนไปตัวแรกแต่เนื่องจากไม่ใช่ Global ตัวต่อไปเลยไม่ถูกแทนที่ ถ้าเราผสม Global กับ insensitive เข้าละก็ ไม่ว่า Hat hat haT ก็โดนแทนค่าทุกตัว
ตัวอย่าง การบล๊อกข้อความคำหยาบแบบง่ายๆ
var patt = /(kuy|fuck|shit)/i;
var str = new Array();
str[0] = "Damn you shit!!";
str[1] = "I hate you fuck";
str[2] = "kuy por mung di";
for(var i =0; i<str.length;i++){
document.write(str[i].replace(patt,"Teddy"));
document.write("<br/>");
}
ตรวจคำศัพท์ที่เป็นคำหยาบหรือเป็นคำที่ต้องการ kuy, fuck, shit ให้เปลี่ยนเป็นคำว่า Teddy แทน(เพื่อความน่ารักมากขึ้น)
String.Match(Pattern)
ตัวอย่างต่อไป ให้สวมบทบาทเป็นผู้สังเกตการเราต้องการสังเกตข้อมูลใน Internet อยากรู้ว่ามีใครบอกรักใครบ้างในวัน Valentie Day ใน Facebook เราโดยข้อมูลมากเกินที่เราจะมองด้วยตาเปล่า เราก็ทำการ Copy ข้อมูลทั้งหมดใน Facebook โดนคลุมดำแล้ว Copy แล้ว Paste เก็บลง String ตัวหนึ่ง สิ่งที่เราต้องการคือต้องการอยากรู้ว่า ใครบอก loveใครบ้าง เช่น Suda love Sam หรือ I love you ให้กรองข้อความเหล่านี้ออกมาจากข้อความทั้งหมด
ตรวจจับการบอกรักกัน
var patt = /\S+\slove\s\S+/ig;
var str = new Array();
str[0] = "I love daddy love me love you , SAM love BOE too ";
str[1] = "And Boy love Suda Improve";
str[2] = "Lovely my boyfriend";
str[3] = "Good morning, My love";
str[4] = "I love you, Henry";
str[5] = "Brain love I have to fuck her";
str[6] = "I love you";
str[7] = "I love you ";
str[8] = "Hey, That's work I'm love its";
str[9] = " If you are a developer, tester or script guru, you have to love Groovy.";
str[10] = "Valentie's is my love.";
for(var i=0;i<str.length;i++){
document.write(str[i].match(patt));
document.write("<br/>");
}//--------------------------output--------------------------------------------------
I love daddy,me love you,SAM love BOE
Boy love Suda
null
null
I love you,
Brain love I
I love you
I love you
I'm love its
to love Groovy.
null

Test() ใช้ตรวจสอบข้อความว่าเป็นไปตาม Regular Expression ที่กำหนดหรือไม่

รายละเอียดอื่นๆ


เขียนโดย ธนดิตถ์ บุตร์หงษ์ , Thanadit Buthong,heaven-front@hotmail.com,Mirror of Kagami
อ้างอิงข้อมูลโดย w3school และอื่นๆ

ตัวอย่างสั้นๆ
1. มี Code ตัวเลข 6 ตัว "010110" ต้องการทำให้เป็น Array 3 ชุดชุดละสองตัว(ใช้ regular expression เข้าช่วย)
คำตอบ : "010110".match(/\d\d/ig);

2.มี ชุดข้อมูลที่จังหวัดอำเภอตำบล ต้องการแยกเก็บใน Array 3 ชุด ตัวอย่างข้อมูล "กรุงเทพมหานคร บางบอน บางโค"
คำตอบ : "กรุงเทพมหานคร บางบอน บางโค".split(' ');

3.ชุดข้อความที่อยู่ "บ้านอู่สำเภอ ซ.- ถ.- จังหวัด - อำเภอ ดำเนินสะดวก จ.ราชบุรี" ถ้าข้อมูลไม่มี(ข้อมูลที่ถูก -)ไม่ต้องแสดง เช่นให้แสดงเป็น "บ้านอู่สำเภอ อำเภอ ดำเนินสะดวก จ.ราชบุรี"
คำตอบ :
var str = "บ้านอู่สำเภอ ซ.- ถ.- จังหวัด - อำเภอ ดำเนินสะดวก จ.ราชบุรี";
var patt = new RegExp(" ([ก-๙]|[a-zA-Z])(\.)*- ","");
str.replace(patt," ");