C# 字符串变量作为Regex()构造函数中的模式
我不能在字符串变量中使用模式,因为正则表达式从不匹配 让我描述一下我想要实现的目标。我有一个返回密码字符串模式的服务。假设当前的模式是:C# 字符串变量作为Regex()构造函数中的模式,c#,regex,visual-studio-2015,C#,Regex,Visual Studio 2015,我不能在字符串变量中使用模式,因为正则表达式从不匹配 让我描述一下我想要实现的目标。我有一个返回密码字符串模式的服务。假设当前的模式是: \\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b 这意味着密码至少需要包含6个字符、一个数字和一个大写字母。我通过以下方式进行测试: string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b"; var rgxPasswordPattern = new Regex(pas
\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b
这意味着密码至少需要包含6个字符、一个数字和一个大写字母。我通过以下方式进行测试:
string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";
var rgxPasswordPattern = new Regex(passwordPattern);
var result = rgxPasswordPattern.IsMatch("Password1");
if(result)
Console.Write("Password match!");
else
Console.Write("Password doesn't match!");
它有效,您可以在这里尝试:
当我在我的环境中使用上述代码时,就会出现问题。唯一的区别是我获取密码模式的方式:
string passwordPattern = _signInService.GetPasswordPattern();
我注意到passwordPattern
包含带引号的模式:
这导致rgxPasswordPattern
也包含引号:
因此,我通过passwordPattern.Substring(1,passwordPattern.Length-2)
从模式中删除了引号:
并选中rgxPasswordPattern
变量:
是的,没有额外的引号。但密码仍然与模式不匹配!
怎么可能呢?我不知道我还能做什么。模式很好,可以在dotnetfiddle.net中使用,但在我的环境中不起作用
非常感谢您的建议。这一行
string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";
在C#中,意思是密码模式
实际上包含以下字符串
\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\b //notice backslahes count
在C#中定义字符串时,反斜杠将转义以下字符。所以,如果你想在字符串中添加\
字符,你必须在那里加上双反斜杠\
。因此,您的服务的问题在于它在模式中返回了额外的反斜杠。这一行
string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";
在C#中,意思是密码模式
实际上包含以下字符串
\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\b //notice backslahes count
在C#中定义字符串时,反斜杠将转义以下字符。所以,如果你想在字符串中添加
\
字符,你必须在那里加上双反斜杠\
。因此,您的服务的问题是它在模式中返回了额外的反斜杠。是的,我直接将其键入IsMatch()
方法(您可以在我问题的最后一张图片上看到)。不,它不起作用,我已经在问题的顶部描述了此场景。是的,我直接将其键入IsMatch()
方法(你可以在我问题的最后一张图片上看到)。不,这行不通,我已经在问题的顶部描述了这个场景。天哪,你是对的,问题是双反斜杠。谢谢你的帮助,你救了我一天:)天哪,你是对的,问题是双反斜杠。谢谢你的帮助,你救了我一天:)