Có trình xác thực cho JavaScript không?
Trước khi gửi dữ liệu đến máy chủ, điều quan trọng là phải đảm bảo tất cả các điều khiển biểu mẫu bắt buộc được điền vào đúng định dạng. Điều này được gọi là xác thực biểu mẫu phía máy khách và giúp đảm bảo dữ liệu được gửi khớp với các yêu cầu được đặt ra trong các điều khiển biểu mẫu khác nhau. Bài viết này hướng dẫn bạn các khái niệm cơ bản và ví dụ về xác thực biểu mẫu phía máy khách Show
Xác thực phía máy khách là kiểm tra ban đầu và là một tính năng quan trọng của trải nghiệm người dùng tốt; . Nếu dữ liệu đến được máy chủ và sau đó bị từ chối, thì một sự chậm trễ đáng chú ý là do phải quay lại máy chủ rồi quay lại phía máy khách để yêu cầu người dùng sửa dữ liệu của họ Tuy nhiên, xác thực phía máy khách không nên được coi là một biện pháp bảo mật toàn diện. Các ứng dụng của bạn phải luôn thực hiện kiểm tra bảo mật đối với bất kỳ dữ liệu nào do biểu mẫu gửi ở phía máy chủ cũng như phía máy khách, vì việc xác thực phía máy khách quá dễ dàng để bỏ qua, vì vậy những người dùng ác ý vẫn có thể dễ dàng gửi dữ liệu xấu đến máy chủ của bạn. Đọc Bảo mật trang web để biết điều gì có thể xảy ra; Xác thực mẫu là gì?Truy cập bất kỳ trang web phổ biến nào có biểu mẫu đăng ký và bạn sẽ nhận thấy rằng họ cung cấp phản hồi khi bạn không nhập dữ liệu của mình theo định dạng họ mong đợi. Bạn sẽ nhận được các tin nhắn như
Điều này được gọi là xác nhận mẫu. Khi bạn nhập dữ liệu, trình duyệt và/hoặc máy chủ web sẽ kiểm tra xem dữ liệu có đúng định dạng và trong giới hạn do ứng dụng đặt ra không. Xác thực được thực hiện trong trình duyệt được gọi là xác thực phía máy khách, trong khi xác thực được thực hiện trên máy chủ được gọi là xác thực phía máy chủ. Trong chương này, chúng tôi đang tập trung vào xác thực phía máy khách Nếu thông tin được định dạng chính xác, ứng dụng sẽ cho phép dữ liệu được gửi đến máy chủ và (thường) được lưu trong cơ sở dữ liệu; Chúng tôi muốn làm cho việc điền vào các biểu mẫu web dễ dàng nhất có thể. Vậy tại sao chúng tôi nhấn mạnh vào việc xác nhận các hình thức của chúng tôi?
Các loại xác thực phía máy khách khác nhauCó hai loại xác thực phía máy khách khác nhau mà bạn sẽ gặp trên web
Sử dụng xác thực biểu mẫu tích hợpMột trong những tính năng quan trọng nhất của điều khiển biểu mẫu hiện đại là khả năng xác thực hầu hết dữ liệu người dùng mà không cần dựa vào JavaScript. Điều này được thực hiện bằng cách sử dụng các thuộc tính xác thực trên các phần tử biểu mẫu. Chúng tôi đã thấy nhiều trong số này sớm hơn trong khóa học, nhưng để tóm tắt lại
Nếu dữ liệu được nhập vào trường biểu mẫu tuân theo tất cả các quy tắc được chỉ định bởi các thuộc tính trên, nó được coi là hợp lệ. Nếu không, nó được coi là không hợp lệ Khi một phần tử hợp lệ, những điều sau đây là đúng
Khi một phần tử không hợp lệ, những điều sau đây là đúng
Ghi chú. Có một số lỗi sẽ khiến biểu mẫu không được gửi, bao gồm 8, 9, 20 hoặc 21, 22, 23 hoặc 24, 25, 26 hoặc 27Ví dụ xác thực biểu mẫu tích hợpTrong phần này, chúng ta sẽ kiểm tra một số thuộc tính mà chúng ta đã thảo luận ở trên Tập tin bắt đầu đơn giảnHãy bắt đầu với một ví dụ đơn giản. một đầu vào cho phép bạn chọn xem bạn thích chuối hay anh đào. Ví dụ này liên quan đến một văn bản đơn giản 28 với một 29 được liên kết và một 20 gửi. Tìm mã nguồn trên GitHub khi bắt đầu trái cây. html và một ví dụ trực tiếp bên dưới 3
Để bắt đầu, hãy tạo một bản sao của 21 trong một thư mục mới trên ổ cứng của bạnthuộc tính bắt buộcTính năng xác thực HTML đơn giản nhất là thuộc tính 8. Để bắt buộc nhập dữ liệu, hãy thêm thuộc tính này vào phần tử. Khi thuộc tính này được đặt, phần tử khớp với lớp giả giao diện người dùng 23 và biểu mẫu sẽ không gửi, hiển thị thông báo lỗi khi gửi khi đầu vào trống. Trong khi trống, đầu vào cũng sẽ được coi là không hợp lệ, phù hợp với lớp giả giao diện người dùng 6Thêm thuộc tính 8 vào đầu vào của bạn, như hình bên dưới
Lưu ý CSS được bao gồm trong tệp ví dụ 2CSS này làm cho đầu vào có đường viền nét đứt màu đỏ khi không hợp lệ và đường viền màu đen liền tinh tế hơn khi hợp lệ. Chúng tôi cũng đã thêm một gradient nền khi đầu vào được yêu cầu và không hợp lệ. Hãy thử hành vi mới trong ví dụ dưới đây Ghi chú. Bạn có thể tìm thấy ví dụ này trực tiếp trên GitHub dưới dạng xác thực trái cây. html. Xem thêm mã nguồn Hãy thử gửi biểu mẫu mà không có giá trị. Lưu ý cách đầu vào không hợp lệ được đặt tiêu điểm, thông báo lỗi mặc định ("Vui lòng điền vào trường này") xuất hiện và biểu mẫu không được gửi đi Sự hiện diện của thuộc tính 8 trên bất kỳ phần tử nào hỗ trợ thuộc tính này có nghĩa là phần tử khớp với lớp giả 23 cho dù nó có giá trị hay không. Nếu 28 không có giá trị, thì 29 sẽ khớp với lớp giả 6Ghi chú. Để có trải nghiệm người dùng tốt, hãy cho người dùng biết khi các trường biểu mẫu được yêu cầu. Đó không chỉ là trải nghiệm người dùng tốt mà còn được yêu cầu bởi nguyên tắc trợ năng của WCAG. Ngoài ra, chỉ yêu cầu người dùng nhập dữ liệu bạn thực sự cần. Ví dụ, tại sao bạn thực sự cần biết giới tính hoặc chức danh của ai đó? Xác thực đối với một biểu thức chính quyMột tính năng xác thực hữu ích khác là thuộc tính 4, thuộc tính này mong đợi một Biểu thức chính quy làm giá trị của nó. Biểu thức chính quy (regex) là một mẫu có thể được sử dụng để so khớp các tổ hợp ký tự trong chuỗi văn bản, do đó biểu thức chính quy là lý tưởng để xác thực biểu mẫu và phục vụ nhiều mục đích sử dụng khác trong JavaScriptRegexps khá phức tạp và chúng tôi không có ý định dạy bạn chúng một cách thấu đáo trong bài viết này. Dưới đây là một số ví dụ để cung cấp cho bạn ý tưởng cơ bản về cách chúng hoạt động
Còn nhiều khả năng nữa mà chúng tôi không đề cập ở đây. Để có danh sách đầy đủ và nhiều ví dụ, hãy tham khảo tài liệu Biểu thức chính quy của chúng tôi Hãy thực hiện một ví dụ. Cập nhật HTML của bạn để thêm thuộc tính 4 như thế này 2
Điều này cung cấp cho chúng tôi bản cập nhật sau — hãy dùng thử Ghi chú. Bạn có thể tìm thấy ví dụ này trực tiếp trên GitHub dưới dạng fruit-pattern. html (xem thêm mã nguồn. ) Trong ví dụ này, phần tử 28 chấp nhận một trong bốn giá trị có thể. các chuỗi "banana", "Banana", "cherry" hoặc "Cherry". Cụm từ thông dụng phân biệt chữ hoa chữ thường, nhưng chúng tôi đã làm cho nó hỗ trợ các phiên bản viết hoa cũng như viết thường bằng cách sử dụng mẫu "Aa" bổ sung được lồng trong dấu ngoặc vuôngTại thời điểm này, hãy thử thay đổi giá trị bên trong thuộc tính 4 để bằng với một số ví dụ bạn đã xem trước đó và xem điều đó ảnh hưởng như thế nào đến các giá trị bạn có thể nhập để làm cho giá trị đầu vào hợp lệ. Hãy thử viết một số của riêng bạn, và xem nó diễn ra như thế nào. Làm cho chúng liên quan đến trái cây nếu có thể để các ví dụ của bạn có ý nghĩaNếu một giá trị không trống của 28 không khớp với mẫu của biểu thức chính quy, thì 29 sẽ khớp với lớp giả 6Ghi chú. Một số loại phần tử 28 không cần thuộc tính 4 để được xác thực theo biểu thức chính quy. Ví dụ: chỉ định loại 80 sẽ xác thực giá trị đầu vào dựa trên mẫu địa chỉ email được định dạng tốt hoặc mẫu khớp với danh sách địa chỉ email được phân tách bằng dấu phẩy nếu nó có thuộc tính 81Ghi chú. Phần tử 82 không hỗ trợ thuộc tính 4Hạn chế độ dài của các mục nhập của bạnBạn có thể giới hạn độ dài ký tự của tất cả các trường văn bản được tạo bởi 28 hoặc 82 bằng cách sử dụng các thuộc tính 9 và 0. Một trường không hợp lệ nếu nó có một giá trị và giá trị đó có ít ký tự hơn giá trị 9 hoặc nhiều hơn giá trị 0Trình duyệt thường không cho phép người dùng nhập giá trị dài hơn dự kiến vào trường văn bản. Trải nghiệm người dùng tốt hơn so với việc chỉ sử dụng 0 cũng là cung cấp phản hồi về số lượng ký tự theo cách có thể truy cập và cho phép họ chỉnh sửa nội dung của mình theo kích thước. Một ví dụ về điều này là giới hạn ký tự được thấy trên Twitter khi Tweet. JavaScript, bao gồm các giải pháp sử dụng 0, có thể được sử dụng để cung cấpHạn chế các giá trị của các mục nhập của bạnĐối với các trường số (i. e. 02), các thuộc tính 1 và 2 có thể được sử dụng để cung cấp một loạt các giá trị hợp lệ. Nếu trường chứa một giá trị nằm ngoài phạm vi này, nó sẽ không hợp lệHãy xem một ví dụ khác. Tạo một bản sao mới của fruit-start. tệp html Bây giờ hãy xóa nội dung của phần tử 05 và thay thế nó bằng phần sau 6
8Đây là ví dụ đang chạy trực tiếp Ghi chú. Bạn có thể tìm thấy ví dụ này trực tiếp trên GitHub dưới dạng fruit-length. html. Xem thêm mã nguồn Ghi chú. 02 (và các loại khác, chẳng hạn như 13 và 14) cũng có thể nhận thuộc tính 15, thuộc tính này chỉ định mức tăng hoặc giảm của giá trị khi sử dụng các điều khiển đầu vào (chẳng hạn như các nút số lên và xuống). Trong ví dụ trên, chúng tôi không bao gồm thuộc tính 15, vì vậy giá trị mặc định là 17. Điều này có nghĩa là trôi nổi, như 3. 2, cũng sẽ hiển thị là không hợp lệví dụ đầy đủDưới đây là một ví dụ đầy đủ để hiển thị việc sử dụng các tính năng xác thực tích hợp sẵn của HTML. Đầu tiên, một số HTML 7Và bây giờ là một số CSS để tạo kiểu cho HTML 8Điều này ám chỉ như sau Xem Các thuộc tính liên quan đến xác thực để biết danh sách đầy đủ các thuộc tính có thể được sử dụng để hạn chế các giá trị đầu vào và các loại đầu vào hỗ trợ chúng Ghi chú. Bạn có thể tìm thấy ví dụ này trực tiếp trên GitHub dưới dạng ví dụ đầy đủ. html (xem thêm mã nguồn. ) Xác thực biểu mẫu bằng JavaScriptBạn phải sử dụng JavaScript nếu muốn kiểm soát giao diện của các thông báo lỗi gốc. Trong phần này, chúng ta sẽ xem xét các cách khác nhau để thực hiện việc này API xác thực ràng buộcAPI xác thực ràng buộc bao gồm một tập hợp các phương thức và thuộc tính có sẵn trên các giao diện DOM phần tử biểu mẫu sau
API Xác thực ràng buộc cung cấp các thuộc tính sau cho các phần tử trên
API Xác thực ràng buộc cũng cung cấp các phương thức sau cho các phần tử trên và phần tử 84
Triển khai thông báo lỗi tùy chỉnhNhư bạn đã thấy trong các ví dụ về ràng buộc xác thực HTML trước đó, mỗi khi người dùng cố gắng gửi biểu mẫu không hợp lệ, trình duyệt sẽ hiển thị thông báo lỗi. Cách thông báo này được hiển thị tùy thuộc vào trình duyệt Những tin nhắn tự động này có hai nhược điểm
Tùy chỉnh các thông báo lỗi này là một trong những trường hợp sử dụng phổ biến nhất của API Xác thực ràng buộc. Hãy làm việc thông qua một ví dụ đơn giản về cách làm điều này Chúng ta sẽ bắt đầu với một số mã HTML đơn giản (vui lòng đặt mã này vào tệp HTML trống; sử dụng bản sao mới của fruit-start. html làm cơ sở, nếu bạn thích) 0Và thêm đoạn JavaScript sau vào trang 1Ở đây, chúng tôi lưu trữ một tham chiếu đến đầu vào email, sau đó thêm một trình lắng nghe sự kiện để chạy mã được chứa mỗi khi giá trị bên trong đầu vào được thay đổi Bên trong mã được chứa, chúng tôi kiểm tra xem thuộc tính 93 của đầu vào email có trả về 37 hay không, nghĩa là giá trị được chứa không khớp với mẫu cho địa chỉ email được định dạng tốt. Nếu vậy, chúng tôi gọi phương thức 95 với thông báo tùy chỉnh. Điều này làm cho đầu vào không hợp lệ, do đó khi bạn cố gắng gửi biểu mẫu, gửi không thành công và thông báo lỗi tùy chỉnh được hiển thịNếu thuộc tính 93 trả về 32, chúng ta gọi phương thức 95 với chuỗi rỗng. Điều này làm cho đầu vào hợp lệ, vì vậy biểu mẫu sẽ gửiBạn có thể thử nó dưới đây Ghi chú. Bạn có thể tìm thấy ví dụ này trực tiếp trên GitHub dưới dạng thông báo lỗi tùy chỉnh. html (xem thêm mã nguồn. ) Một ví dụ chi tiết hơnBây giờ chúng ta đã thấy một ví dụ thực sự đơn giản, hãy xem cách chúng ta có thể sử dụng API này để xây dựng một số xác thực tùy chỉnh phức tạp hơn một chút Đầu tiên, HTML. Một lần nữa, hãy thoải mái xây dựng cái này cùng với chúng tôi 2Biểu mẫu đơn giản này sử dụng thuộc tính 99 để tắt tính năng xác thực tự động của trình duyệt; . Tuy nhiên, điều này không vô hiệu hóa hỗ trợ cho API xác thực ràng buộc cũng như ứng dụng của các lớp giả CSS như 5, v.v. Điều đó có nghĩa là mặc dù trình duyệt không tự động kiểm tra tính hợp lệ của biểu mẫu trước khi gửi dữ liệu của nó, nhưng bạn vẫn có thể tự mình thực hiện và định kiểu biểu mẫu cho phù hợpĐầu vào của chúng tôi để xác thực là một 01, là 8 và có một 9 gồm 8 ký tự. Hãy kiểm tra những mã này bằng mã của riêng chúng tôi và hiển thị thông báo lỗi tùy chỉnh cho từng mãChúng tôi đang cố gắng hiển thị các thông báo lỗi bên trong phần tử 04. Thuộc tính 05 được đặt trên 04 đó để đảm bảo rằng thông báo lỗi tùy chỉnh của chúng tôi sẽ được hiển thị cho tất cả mọi người, kể cả thông báo đó được đọc cho người dùng trình đọc màn hìnhGhi chú. Một điểm quan trọng ở đây là việc đặt thuộc tính 99 trên biểu mẫu là điều ngăn biểu mẫu hiển thị bong bóng thông báo lỗi của chính nó và thay vào đó cho phép chúng tôi hiển thị các thông báo lỗi tùy chỉnh trong DOM theo một cách nào đó mà chúng tôi chọnBây giờ, hãy chuyển sang một số CSS cơ bản để cải thiện một chút giao diện của biểu mẫu và cung cấp một số phản hồi trực quan khi dữ liệu đầu vào không hợp lệ 3Bây giờ, hãy xem JavaScript triển khai xác thực lỗi tùy chỉnh 4Các ý kiến giải thích mọi thứ khá tốt, nhưng ngắn gọn
Đây là kết quả trực tiếp Ghi chú. Bạn có thể tìm thấy ví dụ này trực tiếp trên GitHub dưới dạng xác thực tùy chỉnh chi tiết. html. Xem thêm mã nguồn API xác thực ràng buộc cung cấp cho bạn một công cụ mạnh mẽ để xử lý xác thực biểu mẫu, cho phép bạn có quyền kiểm soát rất lớn đối với giao diện người dùng ở trên và ngoài những gì bạn có thể làm chỉ với HTML và CSS Xác thực các biểu mẫu không có API tích hợpTrong một số trường hợp, chẳng hạn như điều khiển tùy chỉnh, bạn sẽ không thể hoặc không muốn sử dụng API xác thực ràng buộc. Bạn vẫn có thể sử dụng JavaScript để xác thực biểu mẫu của mình, nhưng bạn sẽ phải viết biểu mẫu của riêng mình Để xác thực một biểu mẫu, hãy tự hỏi mình một số câu hỏi Tôi nên thực hiện loại xác thực nào?Bạn cần xác định cách xác thực dữ liệu của mình. thao tác chuỗi, chuyển đổi kiểu, biểu thức chính quy, v.v. Tuỳ bạn Tôi nên làm gì nếu biểu mẫu không hợp lệ?Đây rõ ràng là một vấn đề giao diện người dùng. Bạn phải quyết định biểu mẫu sẽ hoạt động như thế nào. Biểu mẫu có gửi dữ liệu không? Làm cách nào để giúp người dùng sửa dữ liệu không hợp lệ?Để giảm bớt sự thất vọng của người dùng, điều rất quan trọng là cung cấp càng nhiều thông tin hữu ích càng tốt để hướng dẫn họ sửa lỗi đầu vào của mình. Bạn nên đưa ra các đề xuất trước để họ biết những gì được mong đợi, cũng như các thông báo lỗi rõ ràng. Nếu bạn muốn tìm hiểu các yêu cầu về giao diện người dùng xác thực biểu mẫu, đây là một số bài viết hữu ích bạn nên đọc
Một ví dụ không sử dụng API xác thực ràng buộcĐể minh họa điều này, sau đây là phiên bản đơn giản hóa của ví dụ trước mà không có API xác thực ràng buộc HTML gần như giống nhau; 5Tương tự, CSS không cần phải thay đổi nhiều; 6Những thay đổi lớn nằm trong mã JavaScript, mã này cần thực hiện nhiều công việc nặng nhọc hơn 7Kết quả trông như thế này Như bạn có thể thấy, không khó để tự xây dựng một hệ thống xác thực. Phần khó khăn là làm cho nó đủ chung chung để sử dụng cả đa nền tảng và trên bất kỳ hình thức nào bạn có thể tạo. Có nhiều thư viện có sẵn để thực hiện xác thực biểu mẫu, chẳng hạn như Xác thực. js Kiểm tra kỹ năng của bạnBạn đã đọc đến cuối bài viết này, nhưng liệu bạn có nhớ được thông tin quan trọng nhất không? . Xác thực biểu mẫu Tóm lượcXác thực biểu mẫu phía máy khách đôi khi yêu cầu JavaScript nếu bạn muốn tùy chỉnh kiểu dáng và thông báo lỗi, nhưng nó luôn yêu cầu bạn phải suy nghĩ cẩn thận về người dùng. Luôn nhớ giúp người dùng của bạn sửa dữ liệu họ cung cấp. Để đạt được điều đó, hãy đảm bảo
Khi bạn đã kiểm tra rằng biểu mẫu đã được điền chính xác, biểu mẫu có thể được gửi. Chúng tôi sẽ đề cập đến việc gửi dữ liệu biểu mẫu tiếp theo Chúng tôi có thể xác thực biểu mẫu bằng JavaScript không?JavaScript cung cấp cơ sở để xác thực biểu mẫu ở phía máy khách nên việc xử lý dữ liệu sẽ nhanh hơn so với xác thực phía máy chủ. Hầu hết các nhà phát triển web thích xác thực biểu mẫu JavaScript. Thông qua JavaScript, chúng tôi có thể xác thực tên, mật khẩu, email, ngày, số điện thoại di động và nhiều trường khác
JavaScript có thể xác thực đầu vào của người dùng không?Khi người dùng nhấp vào nút, hàm JavaScript isValidForm sẽ kiểm tra các trường biểu mẫu và trả về true nếu xác thực thành công . Hoặc hàm isValidForm hiển thị hộp thoại có thông báo lỗi và trả về false nếu không phải tất cả các giá trị đã nhập đều đúng. |