Regex untuk password harus mengandung setidaknya delapan karakter, setidaknya satu nomor dan investasi yang lebih rendah dan huruf besar huruf dan karakter khusus

Aku ingin sebuah ekspresi reguler untuk memeriksa bahwa:

Yang berisi password minimal delapan karakter, termasuk setidaknya satu nomor dan termasuk investasi yang lebih rendah dan huruf besar huruf dan karakter khusus, misalnya#, ?, !.

Hal ini tidak dapat password lama anda atau berisi username, "password", atau "websitename"

Dan di sini adalah saya validasi ekspresi yang selama delapan karakter termasuk salah satu huruf besar, satu huruf kecil, dan satu angka atau karakter khusus.

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

Bagaimana saya bisa menulis untuk password harus delapan karakter termasuk salah satu huruf besar, satu karakter khusus dan karakter alfanumerik?

Mengomentari pertanyaan (4)

Minimal delapan karakter, setidaknya satu huruf dan satu angka:

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

Minimal delapan karakter, setidaknya satu huruf, satu angka dan satu karakter khusus:

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

Minimal delapan karakter, setidaknya satu huruf besar, satu huruf kecil dan satu nomor:

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

Minimal delapan karakter, setidaknya satu huruf besar, satu huruf kecil, satu angka dan satu karakter khusus:

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

Minimal delapan dan maksimum 10 karakter, setidaknya satu huruf besar, satu huruf kecil, satu angka dan satu karakter khusus:

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

Anda dapat menggunakan ekspresi reguler ini dengan beberapa lookahead pernyataan (kondisi):

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

Ini regex akan menegakkan aturan ini:

  • Setidaknya satu huruf surat bahasa inggris, (?=.*?[A-Z])
  • Setidaknya satu huruf huruf dalam bahasa inggris, (?=.*?[a-z])
  • Setidaknya satu digit, (?=.*?[0-9])
  • Setidaknya satu karakter khusus, (?=.*?[#?!@$%^&*-])
  • Minimal delapan panjang .{8,} (dengan jangkar)
Komentar (36)

Ekspresi reguler don't memiliki DAN operator, sehingga's cukup sulit untuk menulis regex yang cocok dengan password yang valid, ketika validitas didefinisikan oleh sesuatu DAN sesuatu yang lain DAN sesuatu yang lain...

Tapi, ekspresi reguler yang tidak memiliki ATAU operator, jadi hanya berlaku DeMorgan's teorema, dan menulis regex yang cocok dengan sandi tidak valid:

Apa-apa dengan kurang dari delapan karakter ATAU apa-apa dengan tidak ada angka ATAU tidak ada apa-apa dengan huruf besar ATAU atau apa saja dengan tidak ada huruf kecil ATAU apa-apa dengan tidak ada karakter khusus.

Jadi:

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

Jika ada yang cocok, maka's sandi tidak sah.

Komentar (10)

Hanya perbaikan kecil untuk @anubhava's jawaban: Karena karakter khusus yang terbatas untuk orang-orang di keyboard, gunakan ini untuk setiap karakter khusus:

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

Ini regex akan menegakkan aturan ini:

  • Setidaknya satu huruf bahasa inggris surat
  • Setidaknya satu huruf bahasa inggris surat
  • Setidaknya satu digit
  • Setidaknya satu karakter khusus
  • Minimal delapan panjang
Komentar (3)

Saya memiliki beberapa kesulitan sebagai berikut jawaban yang paling populer untuk keadaan saya. Misalnya, saya validasi gagal dengan karakter seperti ; atau [. Saya tidak tertarik dalam warna putih-daftar saya, karakter khusus, jadi saya bukannya leverage [^\w\s] sebagai ujian - sederhananya - pertandingan non karakter kata (termasuk numerik) dan non karakter ruang putih. Untuk meringkas, di sini adalah apa yang bekerja untuk saya...

  • setidaknya 8 karakter
  • setidaknya 1 karakter numerik
  • setidaknya 1 huruf kecil
  • setidaknya 1 huruf besar
  • setidaknya 1 karakter khusus

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

[JSFiddle Link][1] - demo sederhana yang meliputi berbagai kasus

Komentar (4)

Lebih "generic" versi(?), sehingga tidak ada huruf bahasa inggris sebagai karakter khusus.

^(?=\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/>');
  });
Komentar (0)

Mengimpor file JavaScript jquery.validate.min.js.

Anda dapat menggunakan metode ini:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. Setidaknya satu huruf bahasa inggris surat
  2. Setidaknya satu huruf bahasa inggris surat
  3. Setidaknya satu digit
  4. Setidaknya satu karakter khusus
Komentar (0)

Coba yang satu ini:

  1. Minimal enam karakter
  2. Setidaknya satu huruf besar karakter
  3. Setidaknya satu huruf kecil karakter
  4. Setidaknya satu karakter khusus

Ekspresi:

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

Opsional Karakter Khusus:

  1. Setidaknya satu karakter khusus
  2. Setidaknya satu nomor
  3. Karakter khusus adalah opsional
  4. Minimal enam karakter dan maksimal 16 karakter

Ekspresi:

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

Jika min dan max kondisi tidak diperlukan maka hapus .{6, 16}

  • 6 minimal batas karakter
  • 20 adalah batas karakter maksimum
  • ?= berarti ekspresi pertandingan
Komentar (1)

Aku akan membalas Peter Mortensen, tapi aku don't memiliki cukup reputasi.

Ekspresi yang sempurna untuk masing-masing minimum yang ditentukan persyaratan. Masalah dengan ekspresi yang don't memerlukan karakter khusus adalah bahwa mereka juga don't MEMUNGKINKAN karakter khusus, sehingga mereka juga menegakkan kebutuhan maksimum, yang saya don't percaya OP diminta. Biasanya anda ingin untuk memungkinkan pengguna untuk membuat password yang kuat seperti yang mereka inginkan, mengapa membatasi password yang kuat?

Jadi, nya "minimal delapan karakter, setidaknya satu huruf dan satu angka" ekspresi:

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

mencapai persyaratan minimum, tetapi karakter yang tersisa dapat hanya menjadi huruf dan angka. Untuk memungkinkan (tidak memerlukan) karakter khusus, anda harus menggunakan sesuatu seperti:

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

atau

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

Demikian juga, "minimal delapan karakter, setidaknya satu huruf besar, satu huruf kecil dan satu nomor:"

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

memenuhi bahwa persyaratan minimum, tetapi hanya memungkinkan huruf-huruf dan angka-angka. Gunakan:

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

atau

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

Komentar (2)

Tidak langsung menjawab pertanyaan, tapi apakah itu benar-benar harus regex?

Aku digunakan untuk melakukan banyak Perl, dan terbiasa memecahkan masalah dengan regexes. Namun, ketika mereka mendapatkan lebih rumit dengan semua tampilan-aheads dan lain kebiasaan, anda perlu untuk menulis puluhan unit tes untuk membunuh semua orang sedikit bug.

Selain itu, regex biasanya beberapa kali lebih lambat dari penting atau solusi fungsional.

Sebagai contoh, berikut (tidak terlalu FP) Scala fungsi memecahkan pertanyaan awal sekitar tiga kali lebih cepat dari regex dari jawaban yang paling populer. Apa yang dilakukannya juga sangat jelas bahwa anda don't membutuhkan unit test di:

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
}
Komentar (0)
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}$/    
Komentar (5)

Menurut anda perlu pola ini harus bekerja dengan baik. Coba ini,

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

Hanya membuat sebuah variabel string, menetapkan pola, dan membuat boolean metode yang mengembalikan nilai true jika pola yang benar, yang lain palsu.

Contoh:

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);
}
Komentar (0)

@ClasG sudah disarankan:

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

tapi itu tidak menerima _(underscore) sebagai karakter khusus (misalnya. Aa12345_).

Yang ditingkatkan adalah:

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

I've ditemukan banyak masalah di sini, jadi saya membuat saya sendiri.

Di sini adalah dalam semua itu's kemuliaan, dengan tes:

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

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

Hal-hal untuk melihat keluar untuk:

  1. doesn't menggunakan \w karena itu termasuk _, yang saya'm pengujian.
  2. I've punya banyak masalah pencocokan simbol, tanpa pencocokan akhir baris.
  3. Doesn't menentukan simbol-simbol khusus, ini juga karena berbeda mungkin memiliki simbol yang berbeda pada keyboard mereka bahwa mereka mungkin ingin menggunakan.
Komentar (1)
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}
Komentar (1)

Hanya kita dapat melakukan ini dengan menggunakan HTML5.

Gunakan kode di bawah ini dalam pola atribut,

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

Ini akan bekerja dengan sempurna.

Komentar (0)

Anda dapat menggunakan ekspresi reguler pola untuk memeriksa password apakah sudah sesuai dengan harapan atau tidak.

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

Menggunakan berikut Regex untuk memenuhi kondisi di bawah ini:

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

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

Bisa Test Online: https://regex101.com

Komentar (0)

Coba ini:

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

Ini ekspresi reguler bekerja untuk saya sempurna.

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);
}
Komentar (0)

Demo:

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">
Komentar (0)