Regex xác thực mật khẩu JavaScript

Ghi chú. Chúng tôi sử dụng thuộc tính mẫu (có biểu thức chính quy) bên trong trường mật khẩu để đặt giới hạn cho việc gửi biểu mẫu. nó phải chứa 8 ký tự trở lên có ít nhất một số và một chữ hoa và chữ thường

Bạn có nhiệm vụ đảm bảo rằng mọi mật khẩu do người dùng trang web của bạn chọn đều đáp ứng các yêu cầu về độ phức tạp tối thiểu của tổ chức bạn

Các biểu thức chính quy sau đây kiểm tra nhiều điều kiện riêng lẻ và có thể được kết hợp và kết hợp khi cần thiết để đáp ứng các yêu cầu kinh doanh của bạn. Ở cuối phần này, chúng tôi đã bao gồm một số ví dụ về mã JavaScript cho biết cách bạn có thể liên kết các biểu thức chính quy này với nhau như một phần của quy trình xác thực bảo mật mật khẩu

Độ dài từ 8 đến 32 ký tự

^.{8,32}$
Tùy chọn Regex. Dấu chấm khớp với ngắt dòng ("^ và $ khớp với ngắt dòng" không được đặt)Hương vị regex. . NET, Java, XRegExp, PCRE, Perl, Python, Ruby

JavaScript tiêu chuẩn không có tùy chọn "dấu chấm khớp với ngắt dòng". Sử dụng ‹

^[\s\S]{8,32}$
5› thay vì dấu chấm trong JavaScript để đảm bảo rằng biểu thức chính quy hoạt động chính xác ngay cả đối với những mật khẩu điên rồ bao gồm ngắt dòng

^[\s\S]{8,32}$
Tùy chọn Regex. Không ("^ và $ khớp với ngắt dòng" không được đặt)Hương vị Regex. . NET, Java, JavaScript, PCRE, Perl, Python, Ruby

ASCII chỉ hiển thị và ký tự khoảng trắng

Nếu regex tiếp theo này khớp với mật khẩu, bạn có thể chắc chắn rằng nó chỉ bao gồm các ký tự

^[\s\S]{8,32}$
6–
^[\s\S]{8,32}$
7,
^[\s\S]{8,32}$
8–
^[\s\S]{8,32}$
9,
^[\x20-\x7E]+$
0–
^[\x20-\x7E]+$
1, dấu cách và dấu chấm câu ASCII. Không cho phép ký tự điều khiển, ngắt dòng hoặc ký tự bên ngoài bảng ASCII

^[\x20-\x7E]+$
Tùy chọn Regex. Không ("^ và $ khớp với ngắt dòng" không được đặt)Hương vị Regex. . NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Nếu bạn muốn ngăn chặn thêm việc sử dụng khoảng trắng, hãy sử dụng ‹

^[\x20-\x7E]+$
2› để thay thế

Một hoặc nhiều chữ hoa

Chỉ chữ hoa ASCII

^[\s\S]{8,32}$
1Tùy chọn Regex. Không ("phân biệt chữ hoa chữ thường" không được đặt)Hương vị Regex. . NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Bất kỳ chữ hoa Unicode nào

^[\s\S]{8,32}$
2Tùy chọn Regex. Không ("phân biệt chữ hoa chữ thường" không được đặt)Hương vị Regex. . NET, Java, PCRE, Perl, Ruby 1. 9

Nếu bạn muốn kiểm tra sự hiện diện của bất kỳ ký tự chữ cái nào (không giới hạn ở chữ hoa), hãy bật tùy chọn “không phân biệt chữ hoa chữ thường” hoặc sử dụng ‹

^[\x20-\x7E]+$
3›. Đối với trường hợp Unicode, bạn có thể sử dụng ‹
^[\x20-\x7E]+$
4›, phù hợp với bất kỳ loại chữ cái nào từ bất kỳ ngôn ngữ nào

Một hoặc nhiều chữ thường

Chỉ chữ thường ASCII

^[\s\S]{8,32}$
5Tùy chọn Regex. Không ("phân biệt chữ hoa chữ thường" không được đặt)Hương vị Regex. . NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Bất kỳ chữ thường Unicode nào

^[\s\S]{8,32}$
6Tùy chọn Regex. Không ("phân biệt chữ hoa chữ thường" không được đặt)Hương vị Regex. . NET, Java, PCRE, Perl, Ruby 1. 9

^[\s\S]{8,32}$
7Tùy chọn Regex. Không có hương vị Regex. . NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Một hoặc nhiều ký tự đặc biệt

Chỉ dấu chấm câu và dấu cách ASCII

^[\s\S]{8,32}$
8Tùy chọn Regex. Không có hương vị Regex. . NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Bất cứ thứ gì khác ngoài các chữ cái và số ASCII

^[\s\S]{8,32}$
9Tùy chọn Regex. Không có hương vị Regex. . NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Không cho phép ba hoặc nhiều ký tự giống nhau liên tiếp

Regex tiếp theo này nhằm loại trừ các mật khẩu như

^[\x20-\x7E]+$
5. Nó hoạt động theo cách ngược lại với những cách khác trong công thức này. Nếu khớp, mật khẩu không đáp ứng điều kiện. Nói cách khác, biểu thức chính quy chỉ khớp với các chuỗi lặp lại một ký tự ba lần liên tiếp

^[\s\S]{8,32}$
0Tùy chọn Regex. Dấu chấm khớp ngắt dòng Hương vị Regex. . NET, Java, XRegExp, PCRE, Perl, Python, Ruby
^[\s\S]{8,32}$
1Tùy chọn Regex. Không có hương vị Regex. . NET, Java, JavaScript, PCRE, Perl, Python, Ruby

Ví dụ giải pháp JavaScript, cơ bản

Đoạn mã sau kết hợp năm yêu cầu mật khẩu

  • Độ dài từ 8 đến 32 ký tự

  • Một hoặc nhiều chữ hoa

  • Một hoặc nhiều chữ thường

  • Một hoặc nhiều số

  • Một hoặc nhiều ký tự đặc biệt (dấu câu ASCII hoặc ký tự khoảng trắng)

^[\s\S]{8,32}$
2

Hàm

^[\x20-\x7E]+$
6 vừa hiển thị trả về
^[\x20-\x7E]+$
7 nếu chuỗi được cung cấp đáp ứng các yêu cầu về mật khẩu. Mặt khác,
^[\x20-\x7E]+$
8 được trả lại

Giải pháp JavaScript ví dụ, với xác thực x trên y

Ví dụ tiếp theo này thực thi độ dài mật khẩu tối thiểu và tối đa (8–32 ký tự) và ngoài ra yêu cầu phải có ít nhất ba trong số bốn loại ký tự sau

  • Một hoặc nhiều chữ hoa

  • Một hoặc nhiều chữ thường

  • Một hoặc nhiều số

  • Một hoặc nhiều ký tự đặc biệt (bất kỳ thứ gì khác ngoài chữ cái và số ASCII)

^[\s\S]{8,32}$
3

Như trước đây, hàm

^[\x20-\x7E]+$
6 đã sửa đổi này trả về
^[\x20-\x7E]+$
7 nếu mật khẩu được cung cấp đáp ứng các yêu cầu chung. Nếu không, nó trả về
^[\x20-\x7E]+$
8

Giải pháp JavaScript ví dụ, với xếp hạng bảo mật mật khẩu

Ví dụ mã cuối cùng này là phức tạp nhất trong nhóm. Nó chỉ định điểm tích cực hoặc tiêu cực cho các điều kiện khác nhau và sử dụng biểu thức chính quy mà chúng tôi đang xem xét để giúp tính điểm tổng thể cho mật khẩu được cung cấp. Hàm

^[\s\S]{8,32}$
12 trả về một số từ
^[\x20-\x7E]+$
0–
^[\s\S]{8,32}$
14 tương ứng với xếp hạng mật khẩu “Quá ngắn”, “Yếu”, “Trung bình”, “Mạnh” và “Rất mạnh”

^[\s\S]{8,32}$
4

Do thuật toán xếp hạng mật khẩu này được thiết kế như thế nào nên nó có thể phục vụ hai mục đích tốt như nhau. Đầu tiên, nó có thể được sử dụng để cung cấp cho người dùng hướng dẫn về chất lượng mật khẩu của họ khi họ vẫn đang nhập mật khẩu. Thứ hai, nó cho phép bạn dễ dàng từ chối các mật khẩu không được xếp hạng ở bất kỳ mức nào bạn chọn làm ngưỡng bảo mật tối thiểu của mình. Ví dụ: điều kiện

^[\s\S]{8,32}$
15 có thể được sử dụng để từ chối bất kỳ mật khẩu nào không được xếp hạng là “Mạnh” hoặc “Rất mạnh”. ”

Người dùng nổi tiếng với việc chọn mật khẩu đơn giản hoặc phổ biến, dễ nhớ. Nhưng dễ nhớ không nhất thiết phải chuyển thành thứ giữ an toàn cho tài khoản của họ và thông tin của công ty bạn. Do đó, thường cần thiết để bảo vệ người dùng khỏi chính họ bằng cách thực thi các quy tắc phức tạp tối thiểu của mật khẩu. Tuy nhiên, các quy tắc chính xác để sử dụng có thể rất khác nhau giữa các doanh nghiệp và hệ thống, đó là lý do tại sao công thức này bao gồm nhiều biểu thức chính quy đóng vai trò là nguyên liệu thô để giúp bạn tạo ra bất kỳ tổ hợp quy tắc xác thực nào mà bạn chọn

Việc giới hạn mỗi biểu thức chính quy theo một quy tắc cụ thể mang lại lợi ích bổ sung về tính đơn giản. Kết quả là, tất cả các biểu thức chính quy được hiển thị cho đến nay đều khá đơn giản. Sau đây là một vài ghi chú bổ sung về mỗi người trong số họ

Độ dài từ 8 đến 32 ký tự

Để yêu cầu độ dài tối thiểu hoặc tối đa khác, hãy thay đổi các số được sử dụng làm giới hạn trên và dưới cho bộ định lượng ‹

^[\s\S]{8,32}$
16›. Nếu bạn không muốn chỉ định giá trị tối đa, hãy sử dụng ‹
^[\s\S]{8,32}$
17› hoặc xóa dấu neo ‹
^[\s\S]{8,32}$
18› và thay đổi bộ định lượng thành ‹
^[\s\S]{8,32}$
19›

Tất cả các ngôn ngữ lập trình trong cuốn sách này cung cấp một cách đơn giản và hiệu quả để xác định độ dài của một chuỗi. Tuy nhiên, việc sử dụng biểu thức chính quy cho phép bạn kiểm tra đồng thời cả độ dài tối thiểu và tối đa, đồng thời giúp việc kết hợp và khớp các quy tắc phức tạp của mật khẩu dễ dàng hơn bằng cách chọn từ danh sách biểu thức chính quy

ASCII chỉ hiển thị và ký tự khoảng trắng

Như đã đề cập trước đó, regex này chỉ cho phép các ký tự

^[\s\S]{8,32}$
6–
^[\s\S]{8,32}$
7,
^[\s\S]{8,32}$
8–
^[\s\S]{8,32}$
9,
^[\x20-\x7E]+$
0–
^[\x20-\x7E]+$
1, dấu cách và dấu chấm câu ASCII. Để cụ thể hơn về các ký tự dấu câu được phép, chúng là
^[\s\S]{8,32}$
26,
^[\s\S]{8,32}$
27,
^[\s\S]{8,32}$
28,
^[\s\S]{8,32}$
18,
^[\s\S]{8,32}$
50,
^[\s\S]{8,32}$
51,
^[\s\S]{8,32}$
52,
^[\s\S]{8,32}$
53,
^[\s\S]{8,32}$
54,
^[\s\S]{8,32}$
55,
^[\s\S]{8,32}$
56,
^[\s\S]{8,32}$
57,
^[\s\S]{8,32}$
58,
^[\s\S]{8,32}$
59,
^[\s\S]{8,32}$
60,
^[\s\S]{8,32}$
61,
^[\s\S]{8,32}$
62,
^[\s\S]{8,32}$
63,
^[\s\S]{8,32}$
64, . Nói cách khác, tất cả các dấu câu bạn có thể nhập bằng cách sử dụng chữ U tiêu chuẩn. S. bàn phím

Việc giới hạn mật khẩu đối với các ký tự này có thể giúp tránh các sự cố liên quan đến mã hóa ký tự, nhưng hãy nhớ rằng điều đó cũng hạn chế mức độ phức tạp tiềm tàng của mật khẩu của bạn

Chữ in hoa

Để kiểm tra xem mật khẩu có chứa hai hoặc nhiều chữ cái viết hoa hay không, hãy sử dụng ‹

^[\s\S]{8,32}$
77›. Đối với ba hoặc nhiều hơn, sử dụng ‹______178› hoặc ‹
^[\s\S]{8,32}$
79›. Nếu bạn cho phép bất kỳ chữ hoa Unicode nào, chỉ cần thay đổi từng ký tự ‹
^[\s\S]{8,32}$
80› trong các ví dụ trước thành ‹
^[\s\S]{8,32}$
81›. Trong JavaScript, thay thế các dấu chấm bằng ‹______15›

Chữ viết thường

Như với biểu thức chính quy "chữ hoa", bạn có thể kiểm tra xem mật khẩu có chứa ít nhất hai chữ cái viết thường hay không bằng cách sử dụng ‹

^[\s\S]{8,32}$
83›. Đối với ba hoặc nhiều hơn, sử dụng ‹______184› hoặc ‹
^[\s\S]{8,32}$
85›. Nếu bạn cho phép bất kỳ chữ cái Unicode viết thường nào, hãy đổi từng ký tự ‹
^[\s\S]{8,32}$
86› thành ‹
^[\s\S]{8,32}$
87›. Trong JavaScript, thay thế các dấu chấm bằng ‹______15›

số

Bạn có thể kiểm tra xem mật khẩu có chứa hai số trở lên hay không bằng cách sử dụng ‹

^[\s\S]{8,32}$
89› và ‹
^[\s\S]{8,32}$
90› hoặc ‹
^[\s\S]{8,32}$
91› cho ba số trở lên. Trong JavaScript, thay thế các dấu chấm bằng ‹______15›

Chúng tôi không bao gồm danh sách khớp với bất kỳ chữ số thập phân Unicode nào (‹

^[\s\S]{8,32}$
93›), bởi vì việc coi các ký tự không phải là ____70–
^[\x20-\x7E]+$
1 là số (mặc dù độc giả nói tiếng Ả Rập hoặc tiếng Hindi có thể không đồng ý). )

Ký tự đặc biệt

Sử dụng các nguyên tắc tương tự được hiển thị cho các chữ cái và số nếu bạn muốn yêu cầu nhiều hơn một ký tự đặc biệt. Chẳng hạn, sử dụng ‹______196› sẽ yêu cầu mật khẩu chứa ít nhất hai ký tự đặc biệt

Lưu ý rằng ‹

^[\s\S]{8,32}$
97› khác với ‹
^[\s\S]{8,32}$
98› (phiên bản phủ định của ‹
^[\s\S]{8,32}$
99› viết tắt cho các ký tự từ). ‹
^[\s\S]{8,32}$
98› vượt ra ngoài ‹
^[\s\S]{8,32}$
97› bằng cách loại trừ thêm dấu gạch dưới, điều mà chúng tôi không muốn làm ở đây. Trong một số hương vị regex, ‹____198› cũng loại trừ bất kỳ chữ cái Unicode hoặc chữ số thập phân nào khỏi bất kỳ ngôn ngữ nào

Không cho phép ba hoặc nhiều ký tự giống nhau liên tiếp

Biểu thức chính quy này khớp với các ký tự lặp lại bằng cách sử dụng tham chiếu ngược với ký tự đã khớp trước đó. Công thức 2. 10 giải thích cách hoạt động của phản hồi. Nếu bạn muốn không cho phép sử dụng các ký tự lặp lại, hãy thay đổi biểu thức chính quy thành ‹

^[\s\S]{8,32}$
03›. Để cho phép tối đa ba ký tự lặp lại nhưng không phải bốn ký tự, hãy sử dụng ‹
^[\s\S]{8,32}$
04› hoặc ‹
^[\s\S]{8,32}$
05›

Hãy nhớ rằng bạn cần kiểm tra xem biểu thức chính quy này có khớp với văn bản chủ đề của bạn không. Một trận đấu sẽ chỉ ra rằng các ký tự lặp lại có mặt

Các giải pháp JavaScript ví dụ

Ba khối mã ví dụ JavaScript, mỗi khối sử dụng các biểu thức chính quy của công thức này hơi khác một chút

Ví dụ đầu tiên yêu cầu tất cả các điều kiện phải được đáp ứng nếu không thì mật khẩu không thành công. Trong ví dụ thứ hai, việc vượt qua bài kiểm tra mật khẩu yêu cầu đáp ứng ba trong số bốn yêu cầu có điều kiện. Ví dụ thứ ba, có tiêu đề, có lẽ là thú vị nhất. Nó bao gồm một chức năng có tên là

^[\s\S]{8,32}$
12 thực hiện những gì nó ghi trên hộp và xếp hạng các mật khẩu theo mức độ an toàn của chúng. Do đó, nó có thể giúp cung cấp trải nghiệm thân thiện hơn với người dùng và khuyến khích người dùng chọn mật khẩu mạnh

Thuật toán xếp hạng mật khẩu của hàm

^[\s\S]{8,32}$
12 tăng và giảm điểm mật khẩu nội bộ dựa trên nhiều điều kiện. Nếu độ dài của mật khẩu nhỏ hơn tám ký tự tối thiểu được chỉ định, hàm sẽ trả về sớm với số tương đương là “Quá ngắn. ” Không bao gồm ít nhất ba loại ký tự sẽ bị phạt một điểm, nhưng điều này có thể được cân bằng vì cứ hai ký tự bổ sung sau tối thiểu tám ký tự sẽ thêm một điểm vào điểm chạy

Tất nhiên, mã có thể được tùy chỉnh để cải thiện hơn nữa hoặc để đáp ứng các yêu cầu cụ thể của bạn. Tuy nhiên, nó hoạt động khá tốt, bất kể bạn ném gì vào nó. Để kiểm tra độ chính xác, chúng tôi đã chạy nó với hàng trăm mật khẩu người dùng phổ biến nhất (và do đó không an toàn nhất) đã biết. Tất cả đều được xếp hạng là “Quá ngắn” hoặc “Yếu”, đó chính xác là những gì chúng tôi mong đợi

thận trọng

Sử dụng JavaScript để xác thực mật khẩu trong trình duyệt web có thể rất có lợi cho người dùng của bạn, nhưng hãy đảm bảo cũng triển khai quy trình xác thực của bạn trên máy chủ. Nếu không, nó sẽ không hoạt động đối với những người dùng tắt JavaScript hoặc sử dụng tập lệnh tùy chỉnh để phá vỡ xác thực phía máy khách của bạn