Need regular expression to check the password policy
I have a model:
"password_settings": {
"enable_password_max_length": false,
"enable_password_min_length": false,
"enable_min_number_of_upper": false,
"enable_min_number_of_lower": false,
"enable_min_number_of_numbers": false,
"enable_min_number_of_special_characters": false,
"password_max_length_value": 24,
"password_min_length_value": 1,
"min_number_of_upper_value": 1,
"min_number_of_lower_value": 0,
"min_num_of_numbers_value": 1,
"min_number_of_special_characters_value": 1
},
And if some flags are "True" I need to create Regex dynamically.
for example:
enable_min_number_of_numbers= true
enable_min_number_of_upper = true
min_num_of_numbers_value= 3
min_number_of_upper_value = 2
Regex string will be
^(?=.*[A-Z]).{"min_number_of_upper_value",}(?=.*\d).{"min_num_of_numbers_value",}$
but it does not work for me.
What I need: Help me please to create Regex where I can disable or enable some parts of Regex and where I can set counts from my json.
Thank you.
Given your min_number_of_upper_value
contains the min threshold of upper ASCII letters allowed in the string and min_num_of_numbers_value
defines the min amount of digits in the string, you can use
var pattern = $@"^(?=(?:[^A-Z]*[A-Z]){{{min_number_of_upper_value}}})(?=(?:\D*\d){{{min_num_of_numbers_value}}})";
Do not use $
, this anchor requires the end of string. If your code requires a full string match, then use
var pattern = $@"^(?=(?:[^A-Z]*[A-Z]){{{min_number_of_upper_value}}})(?=(?:\D*\d){{{min_num_of_numbers_value}}}).*";
where you may further adjust the consuming (.*
) pattern in case your requirements are more specific.