正则表达式:动态创建字符串
Posted
技术标签:
【中文标题】正则表达式:动态创建字符串【英文标题】:Regex: creating string dynamically 【发布时间】:2021-07-19 13:38:23 【问题描述】:需要正则表达式来检查密码策略
我有一个模型:
"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",$
但它对我不起作用。
我需要什么: 请帮助我创建正则表达式,我可以在其中禁用或启用正则表达式的某些部分以及我可以从我的 json 设置计数的位置。
谢谢。
【问题讨论】:
这看起来像一个 JSON 字符串。最好使用 json 解析器。 将您的 json 复制到任何为您生成类的工具中 ***.com/questions/21611674/…。只需var my_object = JsonConvert.DeserializeObject<MyAutoGeneratedClass>(jsonText)
,瞧,您的对象中就会填充您的所有数据。
它将是var pattern = $@"^(?=(?:[^A-Z]*[A-Z])min_number_of_upper_value)(?=(?:\D*\d)min_num_of_numbers_value)";
为什么要在一个正则表达式中完成整个逻辑? “始终进行规划,以便您可以为继任者提供家庭住址”
【参考方案1】:
鉴于您的 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).*";
如果您的要求更具体,您可以进一步调整消费 (.*
) 模式。
【讨论】:
不起作用。我添加了 5 个上位后来者和 4 个数字 regex101.com/r/YaCkLT/1 @IgorStrekha 查看正确的测试:regex101.com/r/M2nSxf/1。在插值字符串文字中,单个文字
char 定义为双
。
字符也是如此。请参阅the C# snippet 正确生成^(?=(?:[^A-Z]*[A-Z])5)(?=(?:\D*\d)4).*
。
谢谢。但我能提供更多帮助吗? (?:[^az]*[az])5) - 这部分用于小写字母,(?=(?:[^AZ]*[AZ])5) - 用于大写字母,(?= (?:\D*\d)4) - 用于数字。特殊符号将是什么?最小长度和+最大长度是多少?谢谢维克托...
@IgorStrrekha 见how to match special chars,如果没有详细的规格,我无法提供帮助。至于总最小、最大长度,只需在^
之后使用(?=.min,max$)
或(?=(?s:.)min,max$)
(允许换行)。以上是关于正则表达式:动态创建字符串的主要内容,如果未能解决你的问题,请参考以下文章