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 ?
sumber
Anda dapat menggunakan regex ini dengan beberapa pernyataan lookahead (kondisi) :
Regex ini akan memberlakukan aturan ini:
(?=.*?[A-Z])
(?=.*?[a-z])
(?=.*?[0-9])
(?=.*?[#?!@$%^&*-])
.{8,}
(dengan jangkar)sumber
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:
Jika ada yang cocok dengan itu, maka itu adalah kata sandi yang tidak valid.
sumber
|[a-zA-Z0-9]*
dari itu.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:
sumber
\W
hanya 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.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 ...8
karakter1
karakter numerik1
huruf kecil1
huruf besar1
karakter spesialJSFiddle Link - demo sederhana yang mencakup berbagai kasus
sumber
(?=.*?[^\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.Versi yang lebih "generik" (?), Memungkinkan tidak ada huruf bahasa Inggris sebagai karakter khusus .
sumber
Impor file JavaScript
jquery.validate.min.js
.Anda dapat menggunakan metode ini:
sumber
Coba yang ini:
Ekspresi:
Karakter Khusus opsional:
Ekspresi:
Jika kondisi minimum dan maksimum tidak diperlukan, hapus
.{6, 16}
sumber
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:
sumber
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 punatau
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d$@$!%*#?&]{8,}$
untuk memungkinkan karakter khusus tertentuDemikian 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 punatau
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d$@$!%*?&]{8,}
untuk memungkinkan karakter khusus tertentu.sumber
sumber
|{}:;<>/])[A-Za-z\d$@$!%*?&+~
| {}:; <> /] {8,15} yang akan mencakup karakter Nonalphanumeric berikut: (@ $!% *? & + ~ `| {}Bagaimana dengan mempertimbangkan solusi regex berikut:
^(?=.*[\w])(?=.*[\W])[\w\W]{8,}$
Yang memvalidasi berikut ini:
Lihat berfungsi di tautan berikut https://regex101.com/r/qPmC06/4/
sumber
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W\_])[A-Za-z\d\W\_]{8,}$
?Sesuai dengan kebutuhan Anda, pola ini seharusnya bekerja dengan baik. Coba ini,
Cukup buat variabel string, tetapkan pola, dan buat metode boolean yang mengembalikan true jika polanya benar, kalau tidak salah.
Sampel:
sumber
Saya menemukan banyak masalah di sini, jadi saya buat sendiri.
Ini dia semua kemuliaan, dengan tes:
https://regex101.com/r/DCRR65/4/tests
Hal-hal yang harus diperhatikan:
\w
karena itu termasuk_
, yang saya uji.sumber
sumber
@ClasG telah menyarankan :
tetapi tidak menerima _ (garis bawah) sebagai karakter khusus (mis. Aa12345_).
Yang ditingkatkan adalah:
sumber
Demo:
sumber
Menguji yang ini pada tahun 2020:
Verifikasikan diri Anda
sumber
sumber
Hanya kita bisa melakukan ini dengan menggunakan HTML5.
Gunakan kode di bawah ini dalam atribut pattern,
Ini akan bekerja dengan sempurna.
sumber
Anda dapat menggunakan pola ekspresi reguler di bawah ini untuk memeriksa kata sandi apakah sesuai dengan harapan Anda atau tidak.
sumber
Tautan cek online https://regex101.com/r/mqGurh/1
sumber
Gunakan ini,
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
sumber
Di Java / Android, untuk menguji kata sandi dengan setidaknya satu angka, satu huruf, satu karakter khusus dalam pola berikut:
sumber
Coba ini:
Ungkapan reguler ini cocok untuk saya.
sumber
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.
sumber
Semoga berhasil di bawah ini. Saya mencoba ini dalam kebijakan khusus Azure.
^ (? =. [az]) (? =. [AZ]) (? =. \ d) (? =. [@ # $% ^ & * -_ + = [] {} | \: ',? /
~"();!])([A-Za-z\d@#$%^&*\-_+=[\]{}|\\:',?/
~ "() ;!] |. (?! @)) {6,16} $sumber
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
PENTING : Regex ini juga akan mengecualikan semua karakter lain mis. Angka, karakter khusus seperti $, # ,! dll - selama aturan 1. hingga 3. cocok dengan string input
Pikirkan "." bahkan pada akhir regex. Ini akan cocok dengan hampir semua (dan afaik setiap karakter yang dapat dibaca)
sumber
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:
sumber
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:
... 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:
sumber