Regex untuk kata sandi harus mengandung setidaknya delapan karakter, setidaknya satu angka dan huruf kecil dan besar dan karakter khusus

448

Saya ingin ekspresi reguler untuk memeriksa bahwa:

Sandi mengandung setidaknya delapan karakter, termasuk setidaknya satu nomor dan mencakup lebih rendah dan huruf besar huruf dan karakter khusus, misalnya #, ?, !.

Itu tidak dapat berupa kata sandi lama Anda atau berisi nama pengguna Anda "password",, atau"websitename"

Dan ini adalah ekspresi validasi saya untuk delapan karakter termasuk satu huruf besar, satu huruf kecil, dan satu angka atau karakter khusus.

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

Bagaimana saya bisa menulisnya dengan kata sandi harus delapan karakter termasuk satu huruf besar, satu karakter khusus dan karakter alfanumerik ?

Swapnil Tatkondawar
sumber

Jawaban:

1185

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,}$"

Minimum 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}$"
Srinivas
sumber
46
"^ (? =. * [A-Za-z]) (? =. * \ D) [A-Za-z \ d] {8,} $" tidak mengizinkan simbol sebagai salah satu dari 8 karakter
Wee
Saya menemukan yang berikut ini diperbolehkan untuk semua karakter (khusus & tanda baca), tanpa membuatnya wajib: "^ (? =. * [Az]) (? =. * [AZ]) (? =. * \ D) [a- zA-Z \ d \ w \ W] {8,} $ "
Gavin
kata sandi harus selalu memiliki urutan yang sama persis. apa sesuatu yang lebih umum yang dapat dimulai dengan huruf besar atau karakter khusus.
Ichinga Samuel
414

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

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

Regex ini akan memberlakukan aturan ini:

  • Setidaknya satu huruf besar huruf Inggris ,(?=.*?[A-Z])
  • Setidaknya satu huruf bahasa Inggris huruf kecil, (?=.*?[a-z])
  • Setidaknya satu digit, (?=.*?[0-9])
  • Setidaknya satu karakter khusus, (?=.*?[#?!@$%^&*-])
  • Panjang minimum delapan .{8,}(dengan jangkar)
anubhava
sumber
71

Ekspresi reguler tidak memiliki operator DAN, jadi cukup sulit untuk menulis regex yang cocok dengan kata sandi yang valid, ketika validitas ditentukan oleh sesuatu DAN sesuatu yang lain DAN sesuatu yang lain ...

Tetapi, ekspresi reguler memiliki operator ATAU, jadi terapkan saja teorema DeMorgan, dan tuliskan regex yang cocok dengan kata sandi yang tidak valid:

Apa pun yang kurang dari delapan karakter ATAU apa pun tanpa angka ATAU apa pun tanpa huruf besar ATAU atau apa pun tanpa huruf kecil ATAU apa pun tanpa karakter khusus.

Begitu:

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

Jika ada yang cocok dengan itu, maka itu adalah kata sandi yang tidak valid.

Matt Timmermans
sumber
3
Oke, saya takut Anda adalah salah satu dari ilmuwan komputer yang kadang-kadang kita dapatkan yang tidak menyadari ada perbedaan antara ekspresi reguler dan regex . ;) Memang benar bahwa banyak tugas regex jauh lebih sederhana jika Anda dapat meniadakan hasil pertandingan sesudahnya, tetapi itu tidak selalu mungkin. Itu regex yang indah. Ini tidak sederhana, elegan!
Alan Moore
1
Kenapa saya belum memikirkan sebelumnya? Jawaban yang bagus (bila mungkin untuk meniadakan hasilnya)
TeChn4K
2
yang ini memberi ruang cara memeriksa apakah kata sandi tidak boleh berisi ruang dengan regexp Anda? saya mencoba ini /^(#s|.{0,7}|[^0-9[*|[^AZ[*|[^ .test ('aAa # a1a aa'); tetapi tidak berhasil
Gaurav
1
@Gaurav, tambahkan | [^ \ s] * \. *
Matt Timmermans
1
Suka. Agar bisa berfungsi, saya harus menghapus klausa terakhir |[a-zA-Z0-9]*dari itu.
Aku--
36

Hanya sedikit peningkatan untuk jawaban @ anubhava: Karena karakter khusus terbatas pada yang ada di keyboard, gunakan ini untuk karakter khusus apa pun:

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

Regex ini akan memberlakukan aturan ini:

  • Setidaknya satu huruf Inggris huruf besar
  • Setidaknya satu huruf Inggris huruf kecil
  • Setidaknya satu digit
  • Setidaknya satu karakter khusus
  • Panjang minimum delapan
Edwin Beltran
sumber
1
Dalam rasa JavaScript, \Whanya cocok dengan karakter ASCII. Jadi Anda belum mengubahnya, dan sekarang Anda harus memfilter karakter spasi putih. Lebih jauh lagi, semua tanda kurung dan {1,}penjumlah yang Anda tambahkan adalah derau murni, dan menghilangkan ?operator yang tidak serakah ( ) tidak ada gunanya. Tidak ada peningkatan di sini.
Alan Moore
Dan Cara menghindari untuk string kosong. String regex kosong harus mengembalikan true. Saya telah menggunakan mengikuti regex (? =. * [0-9]) (? =. * [Az]) (? =. * [AZ]) (? =. * [@ # $% ^ & + =]) (? = \\ S + $). {8,15}
Coder
2
gagal untuk _ karakter spesial
Akhilesh
22

Saya mengalami kesulitan mengikuti jawaban yang paling populer untuk keadaan saya. Misalnya, validasi saya gagal dengan karakter seperti ;atau [. Saya tidak tertarik pada daftar putih karakter khusus saya, jadi saya malah memanfaatkannya [^\w\s]sebagai tes - cukup cantumkan - cocokkan karakter non-kata (termasuk angka) dan karakter bukan spasi. Untuk meringkas, inilah yang bekerja untuk saya ...

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

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

JSFiddle Link - demo sederhana yang mencakup berbagai kasus

scniro
sumber
2
Bagus tetapi telah menemukan satu masalah yang ekspresi reguler Anda tidak akan menerima _ (garis bawah) sebagai karakter khusus :(.
user3217843
Bagus, tapi sedikit kesalahan. Ia juga menerima Ruang yang bukan kata sandi yang valid jika kita menggunakan ruang.
Dinesh.net
Saya sangat suka jawaban ini kecuali bahwa itu tidak dapat menerima garis bawah. Yang saya lakukan adalah menggantinya (?=.*?[^\w\s])dengan (?=.*?([^\w\s]|[_]))menambahkan dukungan untuk garis bawah dan itu berfungsi dengan baik sekarang. Juga @ Dinish.net sistem yang saya gunakan memangkas spasi putih dari string kata sandi ketika kami mendapatkannya, jadi menggunakan metode vanilla JS String.prototype.trim () akan bekerja dengan baik jika Anda ingin menggunakan jawaban ini.
Devin Carpenter
15

Versi yang lebih "generik" (?), Memungkinkan 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/>');
  });

SamWhan
sumber
13

Impor 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 Inggris huruf besar
  2. Setidaknya satu huruf Inggris huruf kecil
  3. Setidaknya satu digit
  4. Setidaknya satu karakter khusus
Vikram
sumber
10

Coba yang ini:

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

Ekspresi:

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

Karakter Khusus opsional:

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

Ekspresi:

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

Jika kondisi minimum dan maksimum tidak diperlukan, hapus .{6, 16}

  • 6 adalah batas karakter minimum
  • 20 adalah batas karakter maksimum
  • ? = Berarti ekspresi kecocokan
ojus kulkarni
sumber
2
@ Madhu Saya telah memperbarui jawaban saya untuk kondisi Anda untuk karakter khusus opsional
ojus kulkarni
7

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

Saya biasa melakukan banyak Perl, dan terbiasa memecahkan masalah dengan regex. Namun, ketika mereka menjadi lebih rumit dengan semua pandangan-depan dan keanehan lainnya, Anda perlu menulis lusinan unit test untuk membunuh semua bug kecil itu.

Lebih jauh, suatu regex biasanya beberapa kali lebih lambat daripada solusi imperatif atau fungsional.

Misalnya, fungsi Scala berikut (tidak terlalu FP) memecahkan pertanyaan awal sekitar tiga kali lebih cepat daripada regex jawaban yang paling populer. Apa yang dilakukannya juga sangat jelas sehingga Anda tidak perlu tes unit sama sekali:

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
}
Heikki Salokanto
sumber
7

Saya akan membalas Peter Mortensen, tetapi saya tidak memiliki reputasi yang cukup.

Ekspresinya sempurna untuk setiap persyaratan minimum yang ditentukan. Masalah dengan ekspresinya yang tidak memerlukan karakter khusus adalah bahwa mereka juga tidak MENGIZINKAN karakter khusus, sehingga mereka juga memberlakukan persyaratan maksimum, yang saya tidak percaya OP diminta. Biasanya Anda ingin mengizinkan pengguna membuat kata sandi mereka sekuat yang mereka inginkan; mengapa membatasi kata sandi yang kuat?

Jadi, ekspresinya "minimum delapan karakter, setidaknya satu huruf dan satu angka":

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

mencapai persyaratan minimum, tetapi karakter yang tersisa hanya dapat berupa huruf dan angka. Untuk mengizinkan (tetapi tidak mengharuskan) karakter khusus, Anda harus menggunakan sesuatu seperti:

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

atau

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

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

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

memenuhi persyaratan minimum itu, tetapi hanya membolehkan huruf dan angka. Menggunakan:

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

atau

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

deathwombat
sumber
Terima kasih untuk penjelasannya.
Hải Nguyễn
Ini harus ditandai sebagai jawaban yang benar. Jawaban teratas salah.
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}$/    
SHASHANK HONRAO
sumber
2
Dengan cara apa jawaban Anda lebih baik daripada jawaban lain yang ditulis bertahun-tahun yang lalu?
JSantos
@ JoshYates1980 dapatkah Anda menyebutkan "Karakter Khusus" yang gagal untuk Anda. Biarkan saya memverifikasi dengan itu dan memperbaruinya sesuai. Tapi sejauh yang saya tahu itu bekerja dengan semua sesuai syarat mandat 1 karakter khusus. Menunggu respons Anda ....
SHASHANK HONRAO
1
@SHASHANKHONRAO Saya memperbarui ekspresi ke: ^ (? =. * [Az]) (? =. * [AZ]) (? =. * \ D) (? =. * [$ @ $!% *? & + ~ |{}:;<>/])[A-Za-z\d$@$!%*?&+~| {}:; <> /] {8,15} yang akan mencakup karakter Nonalphanumeric berikut: (@ $!% *? & + ~ `| {}
:;
6

Bagaimana dengan mempertimbangkan solusi regex berikut:

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

Yang memvalidasi berikut ini:

  1. Setidaknya satu huruf kecil
  2. Setidaknya satu huruf besar
  3. Setidaknya satu digit
  4. Setidaknya satu karakter khusus
  5. Setidaknya harus memiliki 8 karakter.

Lihat berfungsi di tautan berikut https://regex101.com/r/qPmC06/4/

Emerson Joel Rojas Soliz
sumber
Regex yang Anda sarankan dan yang di bawah tautan regex101 bervariasi. Bukankah seharusnya begitu ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W\_])[A-Za-z\d\W\_]{8,}$?
CraZ
1
@CraZ Saya telah mengedit regex, terima kasih atas saran Anda.
Emerson Joel Rojas Soliz
3

Sesuai dengan kebutuhan Anda, pola ini seharusnya bekerja dengan baik. Coba ini,

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

Cukup buat variabel string, tetapkan pola, dan buat metode boolean yang mengembalikan true jika polanya benar, kalau tidak salah.

Sampel:

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);
}
Arun Sivanandan
sumber
3

Saya menemukan banyak masalah di sini, jadi saya buat sendiri.

Ini dia semua kemuliaan, dengan tes:

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

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

Hal-hal yang harus diperhatikan:

  1. tidak digunakan \wkarena itu termasuk _, yang saya uji.
  2. Saya memiliki banyak masalah dengan simbol yang cocok, tanpa mencocokkan akhir baris.
  3. Tidak menentukan simbol secara khusus, ini juga karena lokal yang berbeda mungkin memiliki simbol yang berbeda pada keyboard mereka yang mungkin ingin mereka gunakan.
Stefano
sumber
Regex ini lulus bahkan ketika spasi putih di dalam kata sandi, tidak berfungsi untuk saya
Arthur Melo
2

@ClasG telah menyarankan :

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

tetapi tidak menerima _ (garis bawah) sebagai karakter khusus (mis. Aa12345_).

Yang ditingkatkan adalah:

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

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">

Mohideen bin Mohammed
sumber
2

Menguji yang ini pada tahun 2020:

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

Verifikasikan diri Anda

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}`);
    });
}

Mihir Kumar
sumber
Bagaimana ini lebih baik daripada jawaban yang diterima?
Toto
@Toto tidak ada jawaban yang diterima di utas ini, setidaknya saya tidak melihat, ada jawaban dengan banyak suara tetapi saya tidak melihat jawaban yang diterima. Ditambah lagi, saya menemukan ini dan membacanya di regex101 untuk validitas, jadi bagikan dengan potongan kode untuk memverifikasi validitasnya juga.
Mihir Kumar
1

Gunakan Regex berikut untuk memenuhi ketentuan 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,}$

Dapat Menguji Online: https://regex101.com

Samrat Saha
sumber
1

Hanya kita bisa melakukan ini dengan menggunakan HTML5.

Gunakan kode di bawah ini dalam atribut pattern,

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

Ini akan bekerja dengan sempurna.

Vidya
sumber
1

Anda dapat menggunakan pola ekspresi reguler di bawah ini untuk memeriksa kata sandi apakah sesuai dengan harapan Anda atau tidak.

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

Gunakan ini,

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

Ini akan memvalidasi untuk setidaknya satu huruf kecil, satu huruf besar, satu angka dan karakter khusus dari (!, @, #, $,%,?, =, *, &).

Panjang minimum adalah 8 dan panjang maksimum adalah 20

Anand Raja
sumber
Apa bedanya dengan jawaban yang diterima?
Toto
0

Di Java / Android, untuk menguji kata sandi dengan setidaknya satu angka, satu huruf, satu karakter khusus dalam pola berikut:

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

Coba ini:

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

Ungkapan reguler ini cocok untuk saya.

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);
}
Kiwi Rupela
sumber
0

Pola untuk mencocokkan setidaknya 1 karakter huruf besar, 1 digit dan karakter khusus apa saja dan panjang antara 8 hingga 63.

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

Pola ini digunakan untuk pemrograman JAVA.

Anup Seth
sumber
0

Semoga berhasil di bawah ini. Saya mencoba ini dalam kebijakan khusus Azure.

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

Venkatesh
sumber
0

Saya sebenarnya baru saja menyalin jawaban pertama di sini dan mengubahnya menjadi regex lebih nyaman yang membutuhkan satu atas, satu lebih rendah dan setidaknya 8 karakter tetapi menerima semuanya "di antara".

Ini adalah contoh-regex yang membutuhkan

  1. setidaknya 8 karakter
  2. setidaknya satu huruf kecil
  3. setidaknya satu huruf besar

PENTING : Regex ini juga akan mengecualikan semua karakter lain mis. Angka, karakter khusus seperti $, # ,! dll - selama aturan 1. hingga 3. cocok dengan string input

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

Pikirkan "." bahkan pada akhir regex. Ini akan cocok dengan hampir semua (dan afaik setiap karakter yang dapat dibaca)

Frithjof Schaefer
sumber
0

Jika Anda ingin menggunakan ekspresi reguler untuk memeriksa minimum delapan karakter, setidaknya satu huruf besar, setidaknya satu huruf kecil, setidaknya satu angka dari 0 hingga 9, dan setidaknya satu karakter khusus dari:! @ # $% ^ & * _? DAN juga memberi pengguna sedikit informasi lebih lanjut tentang apa yang tidak ada dalam kata sandi, Anda dapat menggunakan kode berikut:

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
}
Menara
sumber
-1

Solusi yang saya temukan di salah satu jawaban sebelumnya sebagai:

* Minimal 8 karakter setidaknya 1 Huruf Besar, 1 Huruf Kecil, 1 Angka dan 1 Karakter Khusus:

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

... tidak berfungsi untuk saya, tetapi yang berikut ini adalah versi yang disederhanakan dan berfungsi dengan baik (tambahkan karakter khusus yang Anda suka, saya tambahkan # di sini), dan tambahkan aturan angka seperti yang Anda lakukan dengan huruf-huruf sebagai:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&]){8,}"
Carette
sumber
1
Ini mengkuantifikasi tampilan positif.
ctwheels