Regex cho mật khẩu phải chứa ít nhất tám ký tự, ít nhất một số và cả chữ thường và chữ hoa và ký tự đặc biệt


445

Tôi muốn một biểu thức chính quy để kiểm tra xem:

Một mật khẩu có chứa ít nhất tám ký tự, trong đó có ít nhất một số và bao gồm cả chữ thường và chữ hoa và ký tự đặc biệt, ví dụ #, ?, !.

Nó không thể là mật khẩu cũ của bạn hoặc chứa tên người dùng của bạn "password", hoặc"websitename"

Và đây là biểu thức xác thực của tôi dành cho tám ký tự bao gồm một chữ cái viết hoa, một chữ cái viết thường và một số hoặc ký tự đặc biệt.

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Làm thế nào tôi có thể viết nó cho một mật khẩu phải có tám ký tự bao gồm một chữ cái viết hoa, một ký tự đặc biệt và ký tự chữ và số ?

Câu trả lời:


1179

Tối thiểu tám ký tự, ít nhất một chữ cái và một số:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

Tối thiểu tám ký tự, ít nhất một chữ cái, một số và một ký tự đặc biệt:

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$"

Tối thiểu tám ký tự, ít nhất một chữ cái viết hoa, một chữ cái viết thường và một số:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

Tối thiểu tám ký tự, ít nhất một chữ cái viết hoa, một chữ cái viết thường, một số và một ký tự đặc biệt:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"

Tối thiểu tám và tối đa 10 ký tự, ít nhất một chữ cái viết hoa, một chữ cái viết thường, một số và một ký tự đặc biệt:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"

46
"^ (? =. * [A-Za-z]) (? =. * \ D) [A-Za-z \ d] {8,} $" không cho phép các ký hiệu là một trong 8 ký tự
Cuối tuần

Tôi đã tìm thấy những điều sau đây được phép cho tất cả các ký tự (đặc biệt & dấu câu), mà không bắt buộc chúng là: "^ (? =. * [Az]) (? =. * [AZ]) (? =. * \ D) [a- zA-Z \ d \ w \ W] {8,} $ "
Gavin

413

Bạn có thể sử dụng biểu thức chính quy này với nhiều xác nhận (điều kiện) :

^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$

Regex này sẽ thực thi các quy tắc sau:

  • Ít nhất một chữ cái viết hoa tiếng Anh ,(?=.*?[A-Z])
  • Ít nhất một chữ cái tiếng Anh viết thường, (?=.*?[a-z])
  • Ít nhất một chữ số, (?=.*?[0-9])
  • Ít nhất một nhân vật đặc biệt, (?=.*?[#?!@$%^&*-])
  • Chiều dài tối thiểu tám .{8,}(với các neo)

71

Các biểu thức thông thường không có toán tử AND, do đó, thật khó để viết một biểu thức chính phù hợp với mật khẩu hợp lệ, khi tính hợp lệ được xác định bởi một cái gì đó VÀ một cái gì khác VÀ một cái gì khác ...

Nhưng, các biểu thức chính quy có toán tử OR, vì vậy chỉ cần áp dụng định lý DeMorgan và viết một biểu thức chính phù hợp với mật khẩu không hợp lệ:

Bất cứ thứ gì có ít hơn tám ký tự HOẶC bất cứ thứ gì không có số HOẶC bất cứ thứ gì không có chữ hoa HOẶC hoặc bất cứ thứ gì không có chữ thường HOẶC bất cứ thứ gì không có ký tự đặc biệt.

Vì thế:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

Nếu bất cứ điều gì phù hợp với điều đó, thì đó là một mật khẩu không hợp lệ.


3
Được rồi, tôi sợ bạn là một trong những nhà khoa học máy tính đôi khi chúng ta có được những người không nhận ra có một sự khác biệt giữa các biểu thức thông thườngregexes . ;) Đúng là nhiều tác vụ regex đơn giản hơn nhiều nếu bạn có thể phủ nhận kết quả trận đấu sau đó, nhưng điều đó không phải lúc nào cũng có thể. Đó là một regex đẹp, mặc dù. Nó không đơn giản, nó thanh lịch!
Alan Moore

1
Tại sao tôi không nghĩ về trước đây? Câu trả lời tuyệt vời (khi có thể phủ nhận kết quả)
TeChn4K

2
cái này có cho phép không gian làm thế nào để kiểm tra xem mật khẩu không nên chứa không gian với regrec của bạn không? tôi đã thử cái này / ^ ^ / n .test ('aAa # a1a aa'); nhưng nó không hoạt động
Gaurav

1
@Gaurav, thêm | [^ \ s] * \ s. *
Matt Timmermans

1
Yêu nó. Để nó hoạt động, tuy nhiên, tôi đã phải loại bỏ mệnh đề cuối cùng |[a-zA-Z0-9]*khỏi nó.
tôi--

35

Chỉ là một cải tiến nhỏ cho câu trả lời của @ anubhava: Vì ký tự đặc biệt được giới hạn ở các ký tự trong bàn phím, hãy sử dụng ký tự này cho bất kỳ ký tự đặc biệt nào:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

Regex này sẽ thực thi các quy tắc sau:

  • Ít nhất một chữ cái viết hoa
  • Ít nhất một chữ cái viết thường
  • Ít nhất một chữ số
  • Ít nhất một nhân vật đặc biệt
  • Chiều dài tối thiểu tám

1
Trong hương vị JavaScript, \Wchỉ khớp với các ký tự ASCII. Vì vậy, bạn đã không thay đổi điều đó và bây giờ bạn phải lọc ra các ký tự khoảng trắng. Hơn nữa, tất cả các dấu ngoặc đơn và bộ {1,}định lượng mà bạn đã thêm là tiếng ồn thuần túy và việc loại bỏ các toán tử không tham lam ( ?) là vô nghĩa. Không có cải thiện ở đây.
Alan Moore

Và làm thế nào để tránh cho chuỗi trống. Regex chuỗi rỗng nên trả về true. Tôi đã sử dụng regex sau (? =. * [0-9]) (? =. * [Az]) (? =. * [AZ]) (? =. * [@ # $% ^ & + =]) . (? = \\ S + $) {8,15}
coder

2
thất bại cho _ nhân vật đặc biệt
Akhilesh

22

Tôi đã gặp một số khó khăn sau câu trả lời phổ biến nhất cho trường hợp của tôi. Ví dụ: xác thực của tôi không thành công với các ký tự như ;hoặc [. Tôi không quan tâm đến việc liệt kê trắng các ký tự đặc biệt của mình, vì vậy thay vào đó tôi tận dụng [^\w\s]như một bài kiểm tra - chỉ cần đặt - khớp các ký tự không phải từ (bao gồm cả số) và các ký tự không trắng. Tóm lại, đây là những gì làm việc cho tôi ...

  • ít nhất 8 nhân vật
  • ít nhất 1 ký tự số
  • ít nhất 1 chữ thường
  • ít nhất 1 chữ hoa
  • ít nhất là 1nhân vật đặc biệt

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

Liên kết JSFiddle - bản demo đơn giản bao gồm nhiều trường hợp khác nhau


2
Đẹp một. nhưng đã tìm thấy một vấn đề là biểu thức chính quy của bạn sẽ không chấp nhận _ (gạch dưới) là một ký tự đặc biệt :(.
user3217843

Tốt, nhưng một chút sai lầm. Nó cũng chấp nhận Không gian không phải là mật khẩu hợp lệ nếu chúng ta sử dụng không gian.
Dinesh.net

Tôi thực sự thích câu trả lời này ngoại trừ việc nó không thể chấp nhận dấu gạch dưới. Tất cả những gì tôi đã làm là thay thế (?=.*?[^\w\s])bằng (?=.*?([^\w\s]|[_]))để thêm hỗ trợ cho phần dưới và bây giờ nó hoạt động rất tốt. Ngoài ra @ Dinish.net hệ thống tôi sử dụng cắt khoảng trắng ra khỏi chuỗi mật khẩu khi chúng tôi nhận được, vì vậy sử dụng phương thức vanilla JS String.prototype.trim () sẽ hoạt động tốt nếu bạn muốn sử dụng câu trả lời này.
Thợ mộc Devin

15

Một phiên bản "chung chung" hơn (?), Cho phép không có chữ cái tiếng Anh nào là ký tự đặc biệt .

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

var pwdList = [
    '@@V4-\3Z`zTzM{>k',
    '12qw!"QW12',
    '123qweASD!"#',
    '1qA!"#$%&',
    'Günther32',
    '123456789',
    'qweASD123',
    'qweqQWEQWEqw',
    '12qwAS!'
  ],
  re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;
  
  pwdList.forEach(function (pw) {
    document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
  });


13

Nhập tệp JavaScript jquery.validate.min.js.

Bạn có thể sử dụng phương pháp này:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. Ít nhất một chữ cái viết hoa
  2. Ít nhất một chữ cái viết thường
  3. Ít nhất một chữ số
  4. Ít nhất một nhân vật đặc biệt

10

Hãy thử cái này:

  1. Tối thiểu sáu ký tự
  2. Ít nhất một ký tự viết hoa
  3. Ít nhất một ký tự viết thường
  4. Ít nhất một nhân vật đặc biệt

Biểu hiện:

"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"

Nhân vật đặc biệt tùy chọn:

  1. Ít nhất một nhân vật đặc biệt
  2. Ít nhất một số
  3. Ký tự đặc biệt là tùy chọn
  4. Tối thiểu sáu ký tự và tối đa 16 ký tự

Biểu hiện:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

Nếu điều kiện tối thiểu và tối đa là không cần thiết thì hãy loại bỏ .{6, 16}

  • 6 là giới hạn ký tự tối thiểu
  • 20 là giới hạn ký tự tối đa
  • ? = có nghĩa là biểu thức khớp

2
@Madhu Tôi đã cập nhật câu trả lời cho tình trạng của bạn cho các ký tự đặc biệt tùy chọn
ojus kulkarni

7

Không trực tiếp trả lời câu hỏi, nhưng nó thực sự phải là một regex?

Tôi đã từng làm rất nhiều Perl và đã quen với việc giải quyết các vấn đề với regexes. Tuy nhiên, khi chúng trở nên phức tạp hơn với tất cả các giao diện và các yêu cầu khác, bạn cần phải viết hàng tá bài kiểm tra đơn vị để tiêu diệt tất cả các lỗi nhỏ đó.

Hơn nữa, một regex thường chậm hơn một vài lần so với một giải pháp bắt buộc hoặc chức năng.

Ví dụ, hàm Scala (không phải rất FP) sau đây giải quyết câu hỏi ban đầu nhanh hơn khoảng ba lần so với biểu thức của câu trả lời phổ biến nhất. Những gì nó làm cũng rõ ràng đến mức bạn không cần một bài kiểm tra đơn vị nào cả:

def validatePassword(password: String): Boolean = {
  if (password.length < 8)
    return false

  var lower = false
  var upper = false
  var numbers = false
  var special = false

  password.foreach { c =>
    if (c.isDigit)       numbers = true
    else if (c.isLower)  lower = true
    else if (c.isUpper)  upper = true
    else                 special = true
  }

  lower && upper && numbers && special
}

7

Tôi sẽ trả lời Peter Mortensen, nhưng tôi không có đủ danh tiếng.

Biểu hiện của anh ấy là hoàn hảo cho từng yêu cầu tối thiểu được chỉ định. Vấn đề với các biểu hiện của anh ta không yêu cầu các ký tự đặc biệt là họ cũng KHÔNG CHO PHÉP các ký tự đặc biệt, vì vậy họ cũng thực thi các yêu cầu tối đa, điều mà tôi không tin OP yêu cầu. Thông thường bạn muốn cho phép người dùng của mình tạo mật khẩu mạnh như họ muốn; Tại sao phải hạn chế mật khẩu mạnh?

Vì vậy, biểu thức "tối thiểu tám ký tự, ít nhất một chữ cái và một số":

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$

đạt được yêu cầu tối thiểu, nhưng các ký tự còn lại chỉ có thể là chữ cái và số. Để cho phép (nhưng không yêu cầu) các ký tự đặc biệt, bạn nên sử dụng một cái gì đó như:

^(?=.*[A-Za-z])(?=.*\d).{8,}$ cho phép bất kỳ nhân vật

hoặc là

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$ cho phép các ký tự đặc biệt

Tương tự, "tối thiểu tám ký tự, ít nhất một chữ cái viết hoa, một chữ cái viết thường và một số:"

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

đáp ứng yêu cầu tối thiểu đó, nhưng chỉ cho phép chữ cái và số. Sử dụng:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ cho phép bất kỳ nhân vật

hoặc là

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,} để cho phép các ký tự đặc biệt cụ thể.


Cảm ơn đã giải thích.
Hải Nguyễn

Điều này nên được đánh dấu là câu trả lời chính xác. Câu trả lời hàng đầu là sai.
Jake

6
Use the following Regex to satisfy the below conditions:

Conditions: 1] Min 1 uppercase letter.
            2] Min 1 lowercase letter.
            3] Min 1 special character.
            4] Min 1 number.
            5] Min 8 characters.
            6] Max 30 characters.

Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/    

2
Bằng cách nào thì câu trả lời của bạn tốt hơn những câu trả lời khác được viết từ nhiều năm trước?
JSantos

@ JoshYates1980 bạn có thể vui lòng đề cập đến "Nhân vật đặc biệt" mà regex thất bại cho bạn. Hãy để tôi xác minh với điều đó và cập nhật nó cho phù hợp. Nhưng theo tôi biết thì nó hoạt động với tất cả các điều kiện bắt buộc của 1 ký tự đặc biệt. Đang chờ phản hồi của bạn ....
SHASHANK HONRAO

1
@SHASHANKHONRAO Tôi đã cập nhật biểu thức thành: ^ (? =. * [Az]) (? =. * [AZ]) (? =. * \ D) (? =. * [$ @ $!% *? & + ~ |{}:;<>/])[A-Za-z\d$@$!%*?&+~| {} :; <> /] {8,15} sẽ bao gồm các ký tự Nonalphanumeric sau: (@ $!% *? & + ~ `| {} :; <> /)
JoshYates1980

6

Điều gì về việc xem xét các giải pháp regex sau đây:

^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$

Xác nhận những điều sau đây:

  1. Ít nhất một chữ thường
  2. Ít nhất một chữ hoa
  3. Ít nhất một chữ số
  4. Ít nhất một nhân vật đặc biệt
  5. Ít nhất nó phải có 8 ký tự.

Hãy xem thử hoạt động tại liên kết sau https://regex101.com/r/qPmC06/4/


Regex được đề xuất của bạn và một trong các liên kết regex101 khác nhau. Có nên không ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W\_])[A-Za-z\d\W\_]{8,}$?
CraZ

1
@CraZ Tôi đã chỉnh sửa regex, cảm ơn lời đề nghị của bạn.
Emerson Joel Rojas Soliz

3

Theo nhu cầu của bạn mô hình này nên hoạt động tốt. Thử cái này,

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

Chỉ cần tạo một biến chuỗi, gán mẫu và tạo một phương thức boolean trả về true nếu mẫu đó đúng, ngược lại là false.

Mẫu vật:

String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"

private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}

3

Tôi đã tìm thấy nhiều vấn đề ở đây, vì vậy tôi đã làm cho riêng mình.

Đây là tất cả vinh quang của nó, với các bài kiểm tra:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

https://regex101.com/r/DCRR65/4/tests

Những điều cần chú ý:

  1. không sử dụng \wvì bao gồm _, cái mà tôi đang thử nghiệm.
  2. Tôi đã có rất nhiều rắc rối phù hợp với các biểu tượng, mà không khớp với cuối dòng.
  3. Không chỉ định cụ thể các ký hiệu, điều này cũng là do các địa phương khác nhau có thể có các ký hiệu khác nhau trên bàn phím mà họ có thể muốn sử dụng.

Regex này vượt qua ngay cả khi khoảng trắng nằm trong mật khẩu, không hoạt động với tôi
Arthur Melo


2

@ClasG đã đề xuất :

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

nhưng nó không chấp nhận _ (gạch dưới) là một ký tự đặc biệt (ví dụ: Aa12345_).

Một cải tiến là:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$

2

Bản giới thiệu:

function password_check() {
  pass = document.getElementById("password").value;
  console.log(pass);
  regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
  if (regex.exec(pass) == null) {
    alert('invalid password!')
  }
  else {
    console.log("valid");
  }
}
<input type="text" id="password" value="Sample@1">
<input type="button" id="submit" onclick="password_check()" value="submit">


2

Thử nghiệm cái này vào năm 2020:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$

Xác nhận chính mình

const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
const str = `some12*Nuts`;
let m;

if ((m = regex.exec(str)) !== null) {
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}


Làm thế nào là điều này tốt hơn câu trả lời được chấp nhận?
Toto

@Toto không có câu trả lời được chấp nhận về chủ đề này, ít nhất tôi không thấy câu trả lời nào, có câu trả lời với nhiều phiếu nhưng tôi không thấy câu trả lời được chấp nhận. Thêm vào đó tôi đã tìm thấy cái này và đọc về nó trên regex101 về tính hợp lệ, vì vậy đã chia sẻ nó với một đoạn mã để xác minh tính hợp lệ.
Mihir Kumar

1

Sử dụng Regex sau để đáp ứng các điều kiện dưới đây:

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More

Chế độ: ^(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,}$

Có thể kiểm tra trực tuyến: https://regex101.com


1

Chỉ cần chúng ta có thể làm điều này bằng cách sử dụng HTML5.

Sử dụng mã dưới đây trong thuộc tính mẫu,

pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Nó sẽ hoạt động hoàn hảo.


1

Bạn có thể sử dụng mẫu biểu thức chính quy dưới đây để kiểm tra mật khẩu xem nó có phù hợp với mong đợi của bạn hay không.

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})


1

Dùng cái này,

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%?=*&]).{8,20})

Nó sẽ xác nhận cho ít nhất một chữ thường, một chữ hoa, một số và các nhà từ thiện đặc biệt của (!, @, #, $,%,?, =, *, &).

Độ dài tối thiểu là 8 và chiều dài tối đa là 20


Điều này khác với câu trả lời được chấp nhận như thế nào?
Toto

0

Trong Java / Android, để kiểm tra mật khẩu có ít nhất một số, một chữ cái, một ký tự đặc biệt theo mẫu sau:

"^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"

0

Thử cái này:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$

Biểu thức thường xuyên này làm việc cho tôi hoàn hảo.

function myFunction() {
    var str = "c1TTTTaTTT@";
    var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
    var res = patt.test(str);
    console.log("Is regular matches:", res);
}

0

Mẫu để khớp với ít nhất 1 ký tự chữ hoa, 1 chữ số và bất kỳ ký tự đặc biệt nào và độ dài từ 8 đến 63.

"^ (? =. [Az]) (? =. [AZ]) (? =. * \ D) [a-zA-Z \ d \ W] {8,63} $"

Mẫu này đã được sử dụng để lập trình JAVA.


0

Hy vọng các công trình dưới đây. Tôi đã thử điều này trong chính sách tùy chỉnh Azure.

^ (? =. [az]) (? =. [AZ]) (? =. \ D) (? =. [@ # $% ^ & * -_ + = [] {} | \: ',? / ~&quot;();!])([A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/~ "();!] |. (?! @)) {6,16} $


0

Tôi thực sự vừa sao chép câu trả lời đầu tiên ở đây và biến nó thành một biểu thức chính quy tiện lợi hơn , cần một chữ trên, một chữ thấp hơn và ít nhất 8 ký tự nhưng chấp nhận mọi thứ "ở giữa".

Đây là một ví dụ-regex yêu cầu

  1. độ dài ít nhất 8 ký tự
  2. ít nhất một chữ thường
  3. ít nhất một chữ cái viết hoa

QUAN TRỌNG : Regex này cũng sẽ ngoại trừ tất cả các ký tự khác, ví dụ như số, ký tự đặc biệt như $, #,! vv - miễn là các quy tắc 1. đến 3. khớp với chuỗi đầu vào

^(?=.*[a-z])(?=.*[A-Z]).{8,}$

Tâm trí "." alomst ở cuối của regex. Điều này sẽ phù hợp với hầu hết mọi nhân vật (và afaik bất kỳ nhân vật nào có thể đọc được)


0

Nếu bạn muốn sử dụng các biểu thức chính quy để kiểm tra tối thiểu tám ký tự, ít nhất một chữ cái viết hoa, ít nhất một chữ cái viết thường, ít nhất một số từ 0 đến 9 và ít nhất một ký tự đặc biệt từ :! @ # $% ^ & * _? VÀ cũng cung cấp cho người dùng thêm một chút thông tin về những gì họ đang thiếu trong mật khẩu, bạn có thể sử dụng mã sau đây:

let password = "@Aa3a4d$";

//  Check every single condition separately
let lowercase = password.match((/[a-z]+/g));
let uppercase = password.match((/[A-Z]+/g));
let digits = password.match((/[\d]+/g));
let special = password.match((/[!@#$%^&*_]+/g));
let lenght = password.match((/[A-Za-z\d!@#$%^&*_]{8,}/g));

//  Array to store information about any mismatches in the string
let errors = [];

if (password === '' ) {
    errors.push('Password is required');
}
if (lowercase === null) {
    errors.push('Password must include at least one lowercase letter');
}
if (uppercase === null) {
    errors.push('Password must include at least one uppercase letter');
}
if (digits === null) {
    errors.push('Password must include at least one digit from 0 to 9');
}
if (special  === null) {
    errors.push('Password must include at least one special character');
}
if (lenght === null) {
    errors.push('Password must include at least 8 characters');
}
if (errors.length > 0) {
    console.log(errors);
    return;
} else {
    // Process your password
}

-1

Một giải pháp tôi tìm thấy trong một trong những câu trả lời trước đó là:

* Tối thiểu 8 ký tự ít nhất 1 Bảng chữ cái chữ hoa, 1 Bảng chữ cái viết thường, 1 Số và 1 Ký tự đặc biệt:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}"*

... không hoạt động với tôi, nhưng sau đây là phiên bản đơn giản hóa và hoạt động rất tốt (thêm bất kỳ ký tự đặc biệt nào bạn thích, tôi đã thêm # vào đây) và thêm quy tắc số như bạn làm với các chữ cái như:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&]){8,}"

1
Đây là định lượng một cái nhìn tích cực.
ctwheels
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.