Validation in JavaScript พร้อมใช้โดยใช้ชุด regular expression

Post นี้อาจเป็นประโยชน์มากสำหรับ Dev หลายๆ คนนะครับเพราะได้รวบรวม Validate JavaScript ที่น่าจะครอบคุมเกือบทุกๆ เรื่องสำหรับคนทำ From Application โดยเราอาจจะเข้าใจในเรื่องของ Regular expression อยู่แล้วแต่พอไม่ได้ใช้นานๆ เราก็มักจะลืมไม่รู้ว่าเป็นเหมือนผมกันบ้างหรือเปล่าผมจึงได้รวบรวม Code Validation โดย regular expression  มาไว้เป็น Set ให้เลยครับ

(Regular Expression คำย่อ regexp หรือ regex เป็นวิธีการอธิบายถึงรูปแบบข้อของมูลสตริง รวมไปการค้นหาการแทนที่และการเปรียบเทียบข้อมูลของสตริงในรูปแบบต่างซึ่งมีใช้ในหลายหลายภาษารวมไปถึง JavaScript ของเราด้วย
ภาษาที่ถูก built-in มาเลย เช่น Perl, JavaScript, Ruby, AWK, and Tcl
ภาษาที่ใช้ standard library, เช่น .NET languages, Java, Python, POSIX C and C++ <<  เป็นเพียงใช้หลักการของ Regular Expression แล้ว Develop ต่อยอดในภาษาตัวเองซึ่งจะทำให้วิธีเรียกใช้อาจแต่ต่างจากภาษาด้านบนเล็กน้อยแต่หลักคงยังเหมือนกัน)

Date Validation (ตรวจสอบวันที่)

รูปแบบที่ 1 dd/MM/yyyy และ dd-MM-yyyy วัน เดือน ปี 

 var dateformat = /^(0?[1-9]|[12][0-9]|3[01])[/-](0?[1-9]|1[012])[/-]d{4}$/;   

    console.log(dateformat.test('11/11/2012'));         //True
    console.log(dateformat.test('1/1/2013')); 		 //True
    console.log(dateformat.test('31/12/2013'));	        //True
    console.log(dateformat.test('31/02/2013'));         //true จริงๆ ครวเป็น false
    console.log(dateformat.test('12/31/2013'));         //false

    console.log(dateformat.test('11-11-2012'));         //True
    console.log(dateformat.test('1-1-2013')); 		//True
    console.log(dateformat.test('31-12-2013'));	        //True
    console.log(dateformat.test('31-02-2013'));         //true จริงๆครวเป็น false
    console.log(dateformat.test('12-31-2013'));         //false

รูปแบบที่ 2 MM/dd/yyyy และ MM-dd-yyyy เดือน วัน ปี 

 //MM-dd-yyyy
    //MM/dd/yyyy
    var dateformat = /^(0?[1-9]|1[012])[/-](0?[1-9]|[12][0-9]|3[01])[/-]d{4}$/;   
    console.log(dateformat.test('11/11/2012'));         //True
    console.log(dateformat.test('1/1/2013')); 		//True
    console.log(dateformat.test('31/12/2013'));	        //false
    console.log(dateformat.test('31/02/2013'));         //false
    console.log(dateformat.test('12/31/2013'));         //True
    console.log(dateformat.test('2/31/2013'));          //true  จริงๆครวต้องเป็น false
    console.log('===================================================='); 
    console.log(dateformat.test('11-11-2012'));         //True
    console.log(dateformat.test('1-1-2013')); 		//True
    console.log(dateformat.test('31-12-2013'));	        //false
    console.log(dateformat.test('31-02-2013'));         //false
    console.log(dateformat.test('12-31-2013'));         //True
    console.log(dateformat.test('2-31-2013'));          //true   จริงๆครวต้องเป็น false

จากทั้งสองตัวอย่างด้านบนเราสามารถ Validate ได้เพียง format เท่านั้นแต่เรายังไม่สามารถตรวจสอบว่าเป็นวันที่มีอยู่จริงหรือเปล่าเราจะต้อง Check เพิ่มอีกเช่น 31/2/2014  (dd/mm/yyyy)นั้นยังไม่ถูกต้องเพราะเดือน กุมภาพันธ์ มีเพียง 28,29  ดังตัวอย่างด้านล่าง

//d/m/yyy
var inputText= '31/2/2014';
var dateArray = inputText.split('/');  
console.log(TestDate(dateArray[0],dateArray[1],dateArray[2]));   //false

function TestDate(d,m,y)
{

  var dd = parseInt(d);  
  var mm  = parseInt(m);  
  var yy = parseInt(y);  

  // Create list of days of a month [assume there is no leap year by default]  
  var ListofDays = [31,28,31,30,31,30,31,31,30,31,30,31];  

  //ตรวจสอบวันที่ว่าครวเป็น 30 หรือ 31 วัน
  if (mm==1 || mm>2)  
  {  
  if (dd>ListofDays[mm-1])  
  {  
  //Invalid date format!'
  return false;  
  }  
  }

  //ตรวจสอบว่าเดือนกุมภาพันธ์ ว่าครวมี 28 หรือ 29 วัน
  if (mm==2)  
  {  
  var lyear = false;  
  if ( (!(yy % 4) && yy % 100) || !(yy % 400))   
  {  
  lyear = true;  
  }  
  if ((lyear==false) && (dd>=29))  
  {  
  //'Invalid date format!'  
  return false;  
  }  
  if ((lyear==true) && (dd>29))  
  {  
  //'Invalid date format!
  return false;  
  }  
  }

 return true;

}

Floating Validation (ตรวจสอบตัวเลขทศนิยม)

เงื่อนไขคือ

-ต้องเป็นเลขทศนิยมเช่น 2.34

  var decimal=  /^[-+]?[0-9]+.[0-9]+$/;   
    console.log(decimal.test('2.33'));       //True
    console.log(decimal.test('2.1')); 	     //True
    console.log(decimal.test('0.0'));	     //True
    console.log(decimal.test('2'));          //false
    console.log(decimal.test('.0'));         //false
    console.log(decimal.test('0'));          //false

Number Validation (ตรวจสอบตัวเลข)

เงื่อนไขคือ

-ต้องเป็นตัวเลขทั้งหมด

  var numbers = /^[0-9]+$/;  
    console.log(numbers.test('1234567890'));            //True
    console.log(numbers.test('JavaScriptThai9'));       //false
    console.log(numbers.test('JavaScriptThai'));        //false
    console.log(numbers.test('จาวาสคริปต์ไทย'));            //false

Email Validation (ตรวจสอบ อีเมลล์)

var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;

console.log(emailCheck.test('JavaScriptthai@gmail.com'));   //Return True

ใช่้สำหรับตรวจสอบ ความถูกต้องของ Email

Mobile Number Validation (ตรวจสอบเบอร์มือถือ)

เงื่อนไขคือ

-ต้องเป็นตัวเลขทั้งหมดและอยู่ใน รูปบบ 000-000-0000

 var phoneno = /^(?([0-9]{3}))*-([0-9]{3})*-([0-9]{4})$/; 
    console.log(phoneno.test('000-000-0000'));  //True
    console.log(phoneno.test('9999999999'));    //false

{3} คือ ต้องเป็นเลข 3 หลัก

{4} คือต้องเป็นเลข 4 หลัก
*- คือ ต้องต่อด้วย – เท่านั้น
ใช้สำหรับตรวจสอบความถูกต้องของเบอร์โทรศัพท์มือถือ

Zipcode Validation (ตรวจสอบรหัสไปรษณีย์)

var Zipcode =  /^d{5}$/; 
    console.log(Zipcode .test('10140'));         //True
    console.log(Zipcode .test('9999999999'));    //false

Password Validate (ตรวจสอบพาสเวิร์ด)

เงื่อนไขคือ
-ต้องมีทั้งตัวเลขและตัวหนังสือ
-ต้องมีทั้งตัวหนังสือพิมพ์เล็กและพิมพ์ใหญ่และมีตัวเลขอย่างน้อย 1 ตัว
-ต้องมีความยาวอย่างน้อย 8 ตัวแต่ไม่เกิน 32 ตัว

 var phoneno = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,32}$/; 
    console.log(Password.test('P@ssw0rd'));        //True
    console.log(Password.test('Password123'));     //True
    console.log(Password.test('9999999999'));      //false
    console.log(Password.test('password123'));     //false

Letters(ENG) Validation (ตรวจสอบว่าเป็นตัวอักษรภาษาอังกฤษทั้งหมด)

เงื่อนไขคือ

-ต้องเป็นตัวอักษรภาษาอังกฤษทั้งหมดเท่านั้น

 var letters = /^[A-Za-z]+$/;  
    console.log(letters.test('Fatman'));         //True
    console.log(letters.test('Fatman1'));        //false
    console.log(letters.test('Fatmanอ้วน'));      //false
    console.log(letters.test('Fatman Good'));    //false

Letters(Thai) Validation (ตรวจสอบว่าเป็นตัวอักษรภาษาไทยทั้งหมด)

เงื่อนไขคือ

-ต้องเป็นตัวอักษรภาษาไทยทั้งหมดเท่านั้น

  var letters = /^[u0E01-u0E5B]+$/;  
    console.log(letters.test('จาวาสคริปต์'));         //True
    console.log(letters.test('จาวาสคริปต์1'));        //false
    console.log(letters.test('จาวาสคริปต์ Thai'));    //false
    console.log(letters.test('จาวาสคริปต์ ไทย'));     //false

u0E01 คือ แทนตัวหนังสือตัว แรกของภาษาไทย U คือ ให้อ่านเพิ่มที่นี่ครับ Unicode Enabled article(Windows 874).

Windows 874 Unicode

Credit Card Validation (ตรวจสอบบัตรเครดิต)

Validate a American Express credit card (บัตรเครดิต อเมริกัน เอ็กซ์เพรส)

เงื่อนไขคือ

-เริ่มต้น 34 หรือ 37
-ความยาว 15 ตัวอักษร

   var cardno = /^(?:3[47][0-9]{13})$/;  
    console.log(cardno.test('341239405594556'));        //True
    console.log(cardno.test('371239405594556')); 	//True
    console.log(cardno.test('3412394055945566'));	//false
    console.log(cardno.test('1111111111111111'));       //false
    console.log(cardno.test('444444444444'));		//false

 Validate a Visa credit card (บัตรเครดิต วีซ่า)

เงื่อนไขคือ
-เริ่มต้น 4
-ความยาว 13 หรือ 16 ตัวอักษร

 var cardno = /^(?:4[0-9]{12}(?:[0-9]{3})?)$/;  
    console.log(cardno.test('4123457689001'));              //True
    console.log(cardno.test('4000985765678993')); 	    //True
    console.log(cardno.test('3412394055945566'));	    //false
    console.log(cardno.test('1111111111111111'));	    //false
    console.log(cardno.test('444444444444'));		    //false

 Validate a MasterCard (บัตรเครดิต มาสเตอร์คาร์ด)

เงื่อนไขคือ
-เริ่มต้น 51 หรือ 55
-ความยาว 16 ตัวอักษร

 var cardno = /^(?:5[1-5][0-9]{14})$/;   
    console.log(cardno.test('5123457689001444'));       //True
    console.log(cardno.test('5500985765678993')); 	//True
    console.log(cardno.test('3412394055945566'));	//false
    console.log(cardno.test('1111111111111111'));       //false
    console.log(cardno.test('444444444444'));	        //false

 Validate a Diners Club Card

เงื่อนไขคือ
-เริ่มต้น 300 – 305, 36 หริอ 38
-ความยาว 14

  var cardno = /^(?:3(?:0[0-5]|[68][0-9])[0-9]{11})$/; 
    console.log(cardno.test('30060114589071'));       //True
    console.log(cardno.test('30160114589071'));       //True
    console.log(cardno.test('30260114589071'));	      //True
    console.log(cardno.test('30360114589071'));	      //True
    console.log(cardno.test('30460114589071'));	      //True
    console.log(cardno.test('30560114589071'));	      //True
    console.log(cardno.test('36560114589071'));       //True
    console.log(cardno.test('38560114589071'));       //True
    console.log(cardno.test('48560114589071'));       //false

 

Validate a JCB Card (บัตรเครดิต เจซีบี)

เงื่อนไขคือ
-เริ่มต้น 2131 หรือ 1800 ความยาว 15 ตัวอักษร
-เริ่มต้น 35 ความยาว 16 ตัวอักษร

  var cardno = /^(?:(?:2131|1800|35d{3})d{11})$/;   
    console.log(cardno.test('213123456789046'));      //True
    console.log(cardno.test('180033567888865'));      //True
    console.log(cardno.test('3512567890567890'));     //True
    console.log(cardno.test('30360114589071'));	      //false
    console.log(cardno.test('30460114589071'));	      //false
    console.log(cardno.test('30560114589071'));	      //false
    console.log(cardno.test('36560114589071'));       //false
    console.log(cardno.test('38560114589071'));       //false
    console.log(cardno.test('48560114589071'));       //false

Leave a Reply