Saya benar-benar menyalin regex kompleksitas kata sandi sampel di https://github.com/heartcombo/devise/wiki/How-To:-Set-up-simple-password-complexity-requirements.

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

Saya memodifikasinya untuk menyertakan tanda sama dengan:

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

Atau

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

Namun, ketika memeriksa melalui irb, saya menemukan yang berikut:

irb(main):001:0> 'Abcd0123' =~ /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,70}$/
=> nil
irb(main):002:0> 'Abcd0123' =~ /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-\=]).{8,70}$/
=> 0
irb(main):003:0> 'Abcd0123' =~ /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-=]).{8,70}$/
=> 0
  1. Mengapa karakter tanda sama dengan tambahan salah cocok dengan Abcd0123 padahal jelas tidak memiliki karakter khusus?
  2. Apakah ada cara untuk memasukkan karakter tanda sama dengan sebagai simbol khusus?

n.b.

Mac OS X 10.14.6

checked with the following ruby versions:
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin18] - irb 0.9.6(09/06/30)
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin18] - irb 1.2.1 (2019-12-24)
0
AES 20 November 2020, 05:25

1 menjawab

Jawaban Terbaik

Jawaban singkat: [*-=] berarti "karakter dalam rentang dari * hingga =", yang sebenarnya berarti salah satu dari berikut ini:

*+,./0123456789:;<=

Untuk memperbaikinya, letakkan simbol - di awal grup, atau akhir grup, atau dengan garis miring terbalik:

# Good:
[#?!@$%^&*=-]
[-#?!@$%^&*=]
[#?!@$%^&*\-=]

# Bad:
[#?!@$%^&*-=]

Jawaban yang lebih baik: Menurut pendapat saya, ini bukan desain perangkat lunak yang bagus! Mengapa kata sandi harus dibatasi untuk menyertakan salah satu dari "karakter khusus" yang terbatas dan sewenang-wenang ini? Mengapa saya tidak dapat menggunakan £ sebagai "karakter khusus"? Atau <? Atau ? Atau ±? Atau ~? ........

Anda dapat menggunakan grup bernama, untuk menyertakan semua karakter non-alfanumerik sebagai karakter "khusus":

password =~ /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=[[:^alnum:]]).{8,70}$/
0
Tom Lord 20 November 2020, 15:17