正则表达式:动态创建字符串

Regex: creating string dynamically

需要正则表达式来检查密码策略

我有一个模型:

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

如果某些标志为“真”,我需要动态创建正则表达式。

例如:

enable_min_number_of_numbers= true
enable_min_number_of_upper = true
min_num_of_numbers_value= 3
min_number_of_upper_value = 2

正则表达式字符串将是

^(?=.*[A-Z]).{"min_number_of_upper_value",}(?=.*\d).{"min_num_of_numbers_value",}$

但这对我不起作用。

我需要: 请帮助我创建 Regex,我可以在其中禁用或启用 Regex 的某些部分以及我可以从 json.

设置计数的地方

谢谢。

鉴于您的 min_number_of_upper_value 包含字符串中允许的 ASCII 大写字母的最小阈值并且 min_num_of_numbers_value 定义了字符串中的最小数字位数,您可以使用

var pattern = $@"^(?=(?:[^A-Z]*[A-Z]){{{min_number_of_upper_value}}})(?=(?:\D*\d){{{min_num_of_numbers_value}}})";

不要使用$,这个锚需要字符串的结尾。如果您的代码需要完整的字符串匹配,请使用

var pattern = $@"^(?=(?:[^A-Z]*[A-Z]){{{min_number_of_upper_value}}})(?=(?:\D*\d){{{min_num_of_numbers_value}}}).*";

如果您的要求更具体,您可以在其中进一步调整消费 (.*) 模式。