Bài 07: 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é.

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('http://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é.

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminTheHalfHeart

TheHalfHeart

Có sở thích viết tuts nên đã từng tham gia viết ở một số diễn đàn, đến năm 2014 mới có điều kiện sáng lập ra freetuts.net. Sinh năm 90 và có 1 vợ 2 con, thích ca hát và lập trình.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.