Một số hàm validate dữ liệu bằng Javascript
Việc sử dụng Javascript để kiểm tra dữ liệu của form đóng vai trò khá quan trọng trong các ứng dụng website bởi vì nó giúp website hoạt động nhanh và thân thiện với người dùng hơn. Tuy nhiên vì Javascript chỉ hoạt động ở Client nên dễ dàng bị người dùng qua mặt, vì vậy đối với những dữ liệu quan trọng bạn nên lọc nó để tránh các lỗi SQL Injection và XSS, đồng thời bạn nên vaildate nó thêm một lần nữa tại Server.
Và sau đây là danh sách một số hàm Javascript validate data mà bạn nên sưu tầm lại để sử dụng.
1. Kiểm tra định dạng Email bằng Javascript
Để kiểm tra định dạng Email thì bạn phải sử dụng kết hợp với biểu thức chính quy Regular Expression. Hàm này hơi dài dòng nhưng mình thấy sử dụng ổn định nên bạn hãy sưu tầm lại nó nhé.
Bài viết này được đăng tại [free tuts .net]
function isEmail(emailStr) { var emailPat=/^(.+)@(.+)$/ var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]" var validChars="\[^\\s" + specialChars + "\]" var quotedUser="(\"[^\"]*\")" var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/ var atom=validChars + '+' var word="(" + atom + "|" + quotedUser + ")" var userPat=new RegExp("^" + word + "(\\." + word + ")*$") var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$") var matchArray=emailStr.match(emailPat) if (matchArray==null) { return false } var user=matchArray[1] var domain=matchArray[2] // See if "user" is valid if (user.match(userPat)==null) { return false } var IPArray=domain.match(ipDomainPat) if (IPArray!=null) { // this is an IP address for (var i=1;i<=4;i++) { if (IPArray[i]>255) { return false } } return true } var domainArray=domain.match(domainPat) if (domainArray==null) { return false } var atomPat=new RegExp(atom,"g") var domArr=domain.match(atomPat) var len=domArr.length if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) { return false } // Make sure there's a host name preceding the domain. if (len<2) { return false } // If we've gotten this far, everything's valid! return true; }
Cách sử dụng:
var str = 'thehalfheart@gmail.com'; var if (isEmail(str)){ alert('Email hợp lệ'); }
2. Kiểm tra định dạng URL bằng Javascript
Kiểm tra định dạng URL chính là kiểm tra định dạng địa chỉ website nên nó phải bắt đầu bằng http
hoặc https
, tiếp sau đó là tuân theo quy luật của domain như: không có khoảng trắng, ...
function isURL(url){ if (url == ""|| url == null) return false; url = trim(url); if (url.indexOf(" ")!=-1) return false; var RegExp = /^http(s)?:\/\/[\w|\-]+(\.[^\.]+)+$/i; if(RegExp.test(url)){ return true; }else{ return false; } }
Cách sử dụng:
if (isURL('https://freetuts.net')){ alert('Domain này đúng rồi'); }
3. Kiểm tra slug của tiêu đề bài viết
Slug chính là phần bỏ khoảng trắng và ký tự có dấu đi và thay vào đó là dấu gạch ngang (-) và các ký tự không dâu, vì vậy để kiểm tra nó là chỉ cần tuân theo hai quy tắc đó.
function isSlug(val){ var reg = /^[a-z0-9-_]+$/; return reg.test(val); }
Cách sử dụng:
if (isSlug('hoc-lap-trinh-tai-freetuts-net')){ alert('Đúng định dạng slug'); }
4. Hàm trong PHP chuyển thành Javascript
Sau đây là một số hàm có sẵn trong PHP nhưng không có sẵn trong Javascript, vì vậy để sử dụng được trong Javascript thì bắt buộc ta phải xây dựng nó.
Hàm empty
Hàm này dùng kiểm tra dữ liệu có tồn tài hoặc bằng rỗng hoặc null hay không. Và sau đây là đoạn code trong Javascript.
function isEmpty(str) { str = str || null; return (typeof str == "undefined" || str == null); }
Hàm is_array
Hàm is_array trong PHP dùng kiểm tra một biến có phải được lưu trữ một mảng hay không.
function isArray(object) { if (object.constructor === Array) return true; else return false; }
Hàm in_arrray
Hàm in_array trong PHP dùng kiểm tra một giá trị nào đó có xuất hiện trong mảng hay không.
function inArray(needle, haystack) { var i = haystack.length; while (i >= 0) { if (haystack[i] === needle) { return true; } i--; } return false; }
Trong đó:
- needle là giá trị cần kiểm tra
- haystack là mảng cần kiểm tra
Ngoài ra bạn có thể tự viết thêm các hàm khác một cách dễ dàng nếu sử dụng thành thạo biểu thức Regular Expression và kiến thức Javascript căn bản.
5. Kiểm tra định dạng ngày tháng bằng Javascript
Để kiểm tra định dạng ngày tháng đúng thì rất là phức tạp, tuy nhiên mình có sưu tầm được một hàm khá hay và hiện tại mình cũng đang sử dụng nó.
function isValidDate(dateStr, format) { if (format == null){ format = "MDY"; } format = format.toUpperCase(); if (format.length != 3) { format = "MDY"; } if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || (format.indexOf("Y") == -1) ) { format = "MDY"; } if (format.substring(0, 1) == "Y") { // If the year is first var reg1 = /^\d{2}(\-|\/)\d{1,2}\1\d{1,2}$/ var reg2 = /^\d{4}(\-|\/)\d{1,2}\1\d{1,2}$/ } else if (format.substring(1, 2) == "Y") { // If the year is second var reg1 = /^\d{1,2}(\-|\/)\d{2}\1\d{1,2}$/ var reg2 = /^\d{1,2}(\-|\/)\d{4}\1\d{1,2}$/ } else { // The year must be third // Tan :: Start : if 'd-m-Y' is invalid format (only remove -) var reg1 = /^\d{1,2}(\/)\d{1,2}\1\d{2}$/ var reg2 = /^\d{1,2}(\/)\d{1,2}\1\d{4}$/ // Tan :: End } // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; } var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was // Check to see if the 3 parts end up making a valid date if (format.substring(0, 1) == "M") { var mm = parts[0]; } else if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; } if (format.substring(0, 1) == "D") { var dd = parts[0]; } else if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; } if (format.substring(0, 1) == "Y") { var yy = parts[0]; } else if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; } if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); } if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); } var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0); if (parseFloat(dd) != dt.getDate()) { return false; } if (parseFloat(mm)-1 != dt.getMonth()) { return false; } return true; }
Trong đó:
- dateStr là giá trị cần kiểm tra
- format là định dạng ngày tháng cần kiểm tra (MDY hoặc DMY)
6. Chuyển đổi Title thành Slug
Hàm này mình có giới thiệu ở bài tạo slug tự động bằng Javascript rồi nhưng mình cũng mạn phép đăng lên đây cho đủ bộ.
function to_slug(str, saperator) { saperator = saperator || '-'; str = str.toLowerCase(); str = str.replace(/[^a-zA-Z0-9\sàáạảãâầấậẩẫăằắặẳẵèéẹẻẽêềếệểễìíịỉĩòóọỏõôồốộổỗơờớợởỡùúụủũưừứựửữỳýỵỷỹđ]/g, ''); str = trim(str); str = str.replace(/(à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ)/g, 'a'); str = str.replace(/(è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ)/g, 'e'); str = str.replace(/(ì|í|ị|ỉ|ĩ)/g, 'i'); str = str.replace(/(ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ)/g, 'o'); str = str.replace(/(ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ)/g, 'u'); str = str.replace(/(ỳ|ý|ỵ|ỷ|ỹ)/g, 'y'); str = str.replace(/(đ)/g, 'd'); str = str.replace(/ /g, '-'); str = str.replace(/(-+)/g, saperator); return str; }
7. Lời kết
Như vậy là mình đã giới thiệu xong một số hàm được viết bằng javascript dùng để kiểm tra định dạng dữ liệu. Ngoài các hàm trên nếu ban thành thao Javascript thì sẽ dễ dàng tự viết lấy tùy vào yêu cầu cụ thể của từng bài toán.
Hy vọng qua bài này sẽ giúp các bạn có cảm hứng với Javascript, cuối cùng chúc bạn học tốt nhé.