API kiểm tra tính hợp lệ Validation trong JavaScript
Javascript nâng cao | by
Trong quá trình phát triển ứng dụng web, việc đảm bảo dữ liệu người dùng nhập vào là chính xác và đầy đủ là một bước không thể thiếu. Một biểu mẫu (form) cho dù được thiết kế đẹp đến đâu cũng sẽ trở nên vô nghĩa nếu không có cơ chế kiểm tra tính hợp lệ dữ liệu đầu vào. Validation – hay kiểm tra tính hợp lệ – chính là bước đầu tiên giúp lọc bỏ những thông tin không đúng định dạng, thiếu sót hoặc không phù hợp trước khi gửi dữ liệu đến phía máy chủ.
JavaScript, kết hợp với các Web API do trình duyệt cung cấp, cho phép lập trình viên kiểm soát chặt chẽ quá trình kiểm tra dữ liệu ngay trên giao diện người dùng. Nhờ đó, không chỉ nâng cao tính chính xác mà còn cải thiện đáng kể trải nghiệm sử dụng của người dùng khi tương tác với website.
Trong bài viết này, mình sẽ tìm hiểu về Validation API – một bộ công cụ được tích hợp sẵn trong trình duyệt giúp kiểm tra, xử lý và phản hồi các lỗi nhập liệu trên biểu mẫu HTML, từ đơn giản như kiểm tra định dạng email, độ dài mật khẩu, đến các quy tắc phức tạp hơn với biểu thức chính quy và lỗi tùy chỉnh.
Khái niệm về Validation API trong JavaScript
Validation là gì?
Validation (kiểm tra tính hợp lệ) là quá trình đánh giá dữ liệu đầu vào của người dùng để đảm bảo rằng dữ liệu đó tuân thủ các quy tắc đã đặt ra. Các quy tắc này có thể là:
-
Trường bắt buộc không được để trống.
-
Địa chỉ email phải đúng định dạng.
-
Mật khẩu phải đủ độ dài tối thiểu.
-
Số tuổi phải nằm trong một khoảng hợp lệ (ví dụ: từ 18 đến 100).
-
Chuỗi ký tự phải phù hợp với mẫu định sẵn (pattern) như số điện thoại, mã sinh viên, v.v.
Mục tiêu của validation là đảm bảo dữ liệu được gửi tới server là đúng đắn, hợp lệ và đáng tin cậy. Việc kiểm tra này có thể được thực hiện ở phía client (trình duyệt) hoặc phía server (máy chủ), nhưng kiểm tra phía client bằng JavaScript thường là bước đầu để tăng tính thân thiện và phản hồi nhanh cho người dùng.
Validation API là gì?
Validation API là một nhóm các thuộc tính và phương thức được tích hợp sẵn trong trình duyệt, cho phép bạn kiểm tra tính hợp lệ của các phần tử trong biểu mẫu HTML thông qua JavaScript. API này hỗ trợ kiểm tra tự động dựa trên các thuộc tính HTML5 như:
-
required
-
min
,max
-
pattern
-
type="email"
,type="number"
, v.v.
Thông qua Validation API, bạn có thể:
-
Xác định xem một trường dữ liệu có hợp lệ hay không.
-
Xem chi tiết lỗi đang xảy ra (sai định dạng, thiếu dữ liệu, sai mẫu…).
-
Hiển thị thông báo lỗi mặc định của trình duyệt hoặc tùy chỉnh thông báo theo yêu cầu.
-
Ngăn không cho form được gửi đi nếu dữ liệu không hợp lệ.
Đặc điểm của Validation API
-
Thuộc nhóm Web APIs: Đây là các chức năng được trình duyệt cung cấp sẵn, không phải là một phần của JavaScript "thuần túy".
-
Không cần cài đặt thêm thư viện ngoài: Bạn có thể sử dụng ngay chỉ với JavaScript và HTML5.
-
Hoạt động chặt chẽ với HTML form: Validation API được thiết kế để làm việc trực tiếp với các phần tử
<input>
,<textarea>
,<form>
… -
Hỗ trợ phản hồi tương tác theo thời gian thực, giúp nâng cao trải nghiệm người dùng.
Validation API là công cụ đơn giản nhưng rất mạnh mẽ, giúp bạn xây dựng các biểu mẫu có khả năng kiểm tra và xử lý dữ liệu đầu vào một cách hiệu quả, nhanh chóng và dễ duy trì.
Các thuộc tính và phương thức trong Validation API trong JavaScript
Validation API cung cấp cho lập trình viên một loạt công cụ để kiểm tra tính hợp lệ của dữ liệu người dùng, thông qua việc tương tác với các phần tử biểu mẫu HTML như <input>
, <textarea>
, hay <select>
. Dưới đây là những thuộc tính và phương thức quan trọng nhất mà bạn cần nắm vững:
Thuộc tính validity
Thuộc tính validity
là một đối tượng đặc biệt có sẵn trên các phần tử form, cho phép bạn kiểm tra các loại lỗi khác nhau một cách chi tiết. Mỗi loại lỗi được thể hiện bằng một giá trị boolean (true
hoặc false
), cho biết lỗi đó có đang xảy ra hay không.
Các thuộc tính phổ biến trong validity
:
Thuộc tính | Ý nghĩa |
---|---|
valueMissing |
Trường bắt buộc nhưng đang để trống (required ) |
typeMismatch |
Dữ liệu không đúng với loại (email , url ,...) |
patternMismatch |
Không khớp với mẫu định dạng (pattern="..." ) |
tooShort |
Dữ liệu ngắn hơn giá trị minLength |
tooLong |
Dữ liệu dài hơn giá trị maxLength |
rangeUnderflow |
Giá trị nhỏ hơn min |
rangeOverflow |
Giá trị lớn hơn max |
stepMismatch |
Giá trị không đúng với bước (step ) |
customError |
Có lỗi do lập trình viên tự đặt bằng setCustomValidity() |
valid |
Trả về true nếu tất cả các kiểm tra đều hợp lệ, ngược lại là false |
Ví dụ:
const emailInput = document.getElementById('email'); if (emailInput.validity.typeMismatch) { console.log("Email không đúng định dạng."); }
Phương thức checkValidity()
Phương thức checkValidity()
giúp kiểm tra tổng thể xem một phần tử có hợp lệ không, dựa trên các quy tắc HTML đã thiết lập (required
, min
, pattern
, ...).
-
Trả về
true
nếu hợp lệ. -
Trả về
false
nếu không hợp lệ. -
Nếu không hợp lệ, trình duyệt sẽ tự động hiển thị hộp thoại cảnh báo mặc định.
Ví dụ:
const form = document.querySelector('form'); if (!form.checkValidity()) { alert("Biểu mẫu chưa hợp lệ!"); }
Phương thức reportValidity()
Tương tự như checkValidity()
, nhưng hiển thị luôn thông báo lỗi nếu phần tử không hợp lệ.
-
Trả về
true
nếu hợp lệ. -
Trả về
false
và hiển thị thông báo lỗi nếu không hợp lệ.
Ví dụ:
const input = document.getElementById('username'); input.reportValidity(); // Nếu lỗi, trình duyệt sẽ hiển thị popup cảnh báo
Phương thức setCustomValidity(message)
Phương thức này cho phép bạn thiết lập thông báo lỗi tùy chỉnh cho phần tử, thay vì dùng thông báo mặc định của trình duyệt.
-
Nếu
message
là chuỗi rỗng (""
) → Không có lỗi. -
Nếu
message
là một chuỗi bất kỳ →customError
sẽ được đặt thànhtrue
.
Ví dụ:
const passwordInput = document.getElementById('password'); if (passwordInput.value.length < 6) { passwordInput.setCustomValidity("Mật khẩu phải có ít nhất 6 ký tự."); } else { passwordInput.setCustomValidity(""); // Xóa lỗi tùy chỉnh } passwordInput.reportValidity(); // Hiển thị lỗi nếu có
Tính năng | Công dụng chính |
---|---|
validity |
Kiểm tra chi tiết từng loại lỗi |
checkValidity() |
Kiểm tra tổng thể, trả về true/false, có thể kích hoạt lỗi mặc định |
reportValidity() |
Kiểm tra và hiển thị thông báo lỗi ngay lập tức |
setCustomValidity() |
Đặt thông báo lỗi tùy chỉnh |
Nhờ vào các thuộc tính và phương thức này, bạn có thể dễ dàng kiểm soát quá trình kiểm tra dữ liệu, từ đơn giản đến nâng cao, giúp tăng tính tương tác và độ tin cậy của biểu mẫu trên website.
Ứng dụng Validation API trong thực tế trong JavaScript
Validation API không chỉ là công cụ hỗ trợ kiểm tra dữ liệu mà còn có thể được áp dụng linh hoạt trong nhiều tình huống thực tế để nâng cao trải nghiệm người dùng. Dưới đây là ba cách ứng dụng phổ biến và hiệu quả nhất:
Kiểm tra dữ liệu khi submit form
Một trong những ứng dụng phổ biến nhất của Validation API là kiểm tra toàn bộ dữ liệu biểu mẫu trước khi gửi đi. Điều này giúp ngăn chặn người dùng gửi các thông tin sai định dạng hoặc thiếu dữ liệu.
Cách thực hiện:
-
Sử dụng phương thức
checkValidity()
để kiểm tra tổng thể. -
Dùng
event.preventDefault()
để chặn hành vi gửi form nếu dữ liệu chưa hợp lệ.
Ví dụ:
<form id="myForm"> <input type="email" id="email" required> <button type="submit">Gửi</button> </form> <script> const form = document.getElementById('myForm'); form.addEventListener('submit', function (event) { if (!form.checkValidity()) { event.preventDefault(); // Chặn submit nếu form không hợp lệ alert("Vui lòng kiểm tra lại các trường nhập."); } }); </script>
Hiển thị lỗi tùy chỉnh theo logic riêng
Trình duyệt sẽ tự hiển thị thông báo lỗi mặc định nếu input không hợp lệ, nhưng đôi khi bạn muốn hiển thị nội dung lỗi thân thiện hơn hoặc cụ thể theo logic của ứng dụng.
Cách thực hiện:
-
Sử dụng
setCustomValidity()
để đặt nội dung lỗi theo ý muốn. -
Kết hợp
reportValidity()
để hiển thị thông báo đó ngay lập tức.
Ví dụ:
<input type="text" id="username" required minlength="5" placeholder="Tên người dùng"> <script> const usernameInput = document.getElementById('username'); usernameInput.addEventListener('blur', function () { if (usernameInput.value.length < 5) { usernameInput.setCustomValidity("Tên người dùng phải có ít nhất 5 ký tự."); } else { usernameInput.setCustomValidity(""); } usernameInput.reportValidity(); // Hiển thị thông báo nếu có lỗi }); </script>
Tương tác thời gian thực (real-time validation)
Thay vì đợi người dùng bấm nút submit mới kiểm tra lỗi, bạn có thể sử dụng các sự kiện như input
, blur
để kiểm tra liên tục khi người dùng đang gõ hoặc rời khỏi ô nhập. Điều này giúp:
-
Phản hồi nhanh chóng.
-
Giảm tỷ lệ sai sót khi gửi form.
-
Nâng cao trải nghiệm người dùng.
Cách thực hiện:
-
Gắn sự kiện
input
để kiểm tra liên tục khi người dùng nhập. -
Gắn sự kiện
blur
để kiểm tra khi người dùng rời khỏi ô nhập.
Ví dụ:
<input type="password" id="password" required minlength="6" placeholder="Nhập mật khẩu"> <script> const passwordInput = document.getElementById('password'); passwordInput.addEventListener('input', () => { if (passwordInput.value.length < 6) { passwordInput.setCustomValidity("Mật khẩu quá ngắn. Phải có ít nhất 6 ký tự."); } else { passwordInput.setCustomValidity(""); } passwordInput.reportValidity(); }); </script>
Một số ví dụ minh họa Validation API trong JavaScript
Validation API cho phép bạn dễ dàng kiểm tra tính hợp lệ của dữ liệu đầu vào, thiết lập thông báo lỗi tùy chỉnh và ngăn không cho form được gửi nếu dữ liệu chưa hợp lệ. Dưới đây là ba ví dụ phổ biến minh họa rõ ràng cách sử dụng API này:
Ví dụ 1: Kiểm tra email có hợp lệ hay không
Trong ví dụ này, ta kiểm tra xem người dùng đã nhập đúng định dạng email chưa, sử dụng thuộc tính validity.typeMismatch
của Validation API.
<label>Email:</label> <input type="email" id="email" required> <button onclick="validateEmail()">Kiểm tra</button> <script> function validateEmail() { const emailInput = document.getElementById('email'); if (emailInput.validity.typeMismatch) { emailInput.setCustomValidity("Vui lòng nhập đúng định dạng email (ví dụ: [email protected])"); } else { emailInput.setCustomValidity(""); } emailInput.reportValidity(); } </script>
Giải thích:
-
typeMismatch
trả vềtrue
nếu email không đúng định dạng. -
Dùng
setCustomValidity()
để hiển thị lỗi thân thiện hơn. -
reportValidity()
để hiển thị thông báo ngay.
Ví dụ 2: Hiển thị lỗi tùy chỉnh nếu mật khẩu quá ngắn
Ví dụ dưới đây minh họa cách tự thiết lập thông báo lỗi nếu mật khẩu có độ dài dưới 6 ký tự. Người dùng sẽ thấy thông báo ngay khi nhập.
<label>Mật khẩu:</label> <input type="password" id="password" required minlength="6" placeholder="Tối thiểu 6 ký tự"> <script> const passwordInput = document.getElementById('password'); passwordInput.addEventListener('input', function () { if (passwordInput.value.length < 6) { passwordInput.setCustomValidity("Mật khẩu quá ngắn. Vui lòng nhập ít nhất 6 ký tự."); } else { passwordInput.setCustomValidity(""); } passwordInput.reportValidity(); }); </script>
Giải thích:
-
Theo dõi sự kiện
input
để kiểm tra độ dài mỗi khi người dùng gõ. -
Hiển thị thông báo ngay nếu độ dài không đạt yêu cầu.
Ví dụ 3: Ngăn submit form nếu dữ liệu không đúng
Ở ví dụ này, khi người dùng bấm nút "Gửi", ta sẽ kiểm tra tính hợp lệ của toàn bộ form. Nếu có trường nào sai, form sẽ không được gửi.
<form id="myForm"> <label>Email:</label> <input type="email" required><br><br> <label>Mật khẩu:</label> <input type="password" required minlength="6"><br><br> <button type="submit">Gửi</button> </form> <script> const form = document.getElementById('myForm'); form.addEventListener('submit', function (event) { if (!form.checkValidity()) { event.preventDefault(); // Ngăn form gửi đi nếu chưa hợp lệ alert("Dữ liệu không hợp lệ. Vui lòng kiểm tra lại."); } }); </script>
Giải thích:
-
checkValidity()
kiểm tra tất cả các trường trong form. -
Nếu form không hợp lệ,
preventDefault()
sẽ chặn hành vi gửi dữ liệu.
Ưu điểm và hạn chế của Validation API trong JavaScript
Validation API là một phần quan trọng trong việc xây dựng các biểu mẫu (form) có khả năng kiểm tra dữ liệu đầu vào một cách hiệu quả. Tuy nhiên, cũng như bất kỳ công cụ nào khác, API này có những điểm mạnh nổi bật và một số hạn chế cần lưu ý khi áp dụng vào thực tế.
Ưu điểm
Đơn giản, dễ dùng, không cần thư viện ngoài
Validation API được tích hợp sẵn trong trình duyệt, bạn không cần cài đặt bất kỳ thư viện JavaScript bên ngoài nào như jQuery Validate hay các plugin khác. Điều này giúp giảm kích thước tệp, tăng tốc độ tải trang và đơn giản hóa việc phát triển.
Tích hợp sâu với HTML5
API này hoạt động tốt với các thuộc tính HTML5 như required
, pattern
, min
, max
, type
, step
, v.v... Bạn chỉ cần thêm các thuộc tính này vào thẻ <input>
là đã có thể bắt đầu kiểm tra tính hợp lệ mà không cần viết mã JavaScript phức tạp.
Ví dụ:
<input type="email" required pattern=".+@gmail\.com">
Hỗ trợ thông báo lỗi mặc định của trình duyệt
Khi dữ liệu không hợp lệ, trình duyệt sẽ tự động hiển thị thông báo lỗi cho người dùng, không cần viết thêm mã xử lý. Thông báo này cũng được bản địa hóa theo ngôn ngữ của hệ thống, giúp người dùng dễ hiểu.
Hạn chế
Giao diện thông báo lỗi mặc định khó tùy chỉnh
Mặc dù trình duyệt hiển thị thông báo lỗi sẵn, việc tùy chỉnh giao diện và nội dung thông báo này bị giới hạn. Bạn không thể thay đổi kiểu hiển thị hoặc thiết kế của hộp thoại này bằng CSS. Nếu cần giao diện đồng bộ với thiết kế riêng, bạn phải ẩn thông báo mặc định và tự xử lý hiển thị lỗi.
Một số validation nâng cao cần tự viết thêm logic
Validation API rất tốt cho các trường hợp cơ bản, nhưng nếu bạn cần kiểm tra nâng cao như:
-
So sánh hai mật khẩu phải giống nhau,
-
Kiểm tra giá trị trùng với cơ sở dữ liệu,
-
Kiểm tra định dạng theo quy tắc phức tạp (như số CMND/CCCD),
-
Kiểm tra điều kiện phụ thuộc giữa các trường (VD: nếu chọn "Khác" thì phải nhập lý do),
… thì bạn phải viết thêm JavaScript thủ công, và sử dụng các phương thức như setCustomValidity()
để bổ sung thông báo lỗi phù hợp.
Kết bài
Validation API trong JavaScript là một công cụ mạnh mẽ và tiện lợi giúp các lập trình viên dễ dàng kiểm tra tính hợp lệ của dữ liệu đầu vào trong biểu mẫu mà không cần sử dụng thêm thư viện ngoài. Với khả năng tích hợp sâu vào HTML5 và hỗ trợ thông báo lỗi mặc định từ trình duyệt, Validation API giúp rút ngắn thời gian phát triển và đảm bảo trải nghiệm người dùng tốt hơn.
Tuy vẫn còn một số hạn chế về khả năng tùy chỉnh giao diện thông báo lỗi và xử lý các điều kiện phức tạp, nhưng với sự kết hợp giữa các phương thức như checkValidity()
, reportValidity()
và setCustomValidity()
, lập trình viên hoàn toàn có thể mở rộng và kiểm soát quá trình xác thực một cách linh hoạt.
Tóm lại, việc nắm vững và áp dụng Validation API không chỉ giúp mã nguồn gọn gàng hơn mà còn góp phần nâng cao chất lượng và độ tin cậy cho các ứng dụng web hiện đại. Đây là kỹ năng cơ bản nhưng cực kỳ quan trọng mà bất kỳ lập trình viên front-end nào cũng nên thành thạo.