我不能在字符串变量中使用模式,因为正则表达式从不匹配。
让我描述一下我想要达到的目标。我有一个服务,它返回密码的字符串模式。假设当前的模式是:
\\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!");
它有效,您可以在这里尝试:https : //dotnetfiddle.net/FNzZjh
当我在我的环境中使用上面的代码时会出现问题。唯一的区别是我获取密码模式的方式:
string passwordPattern = _signInService.GetPasswordPattern();
我注意到passwordPattern
包含用引号包裹的模式:
因此,我通过passwordPattern.Substring(1, passwordPattern.Length - 2)
以下方式从模式中删除了引号:
怎么可能?我不知道我还能做什么。模式很好,在dotnetfiddle.net 中有效,但在我的环境中无效。
我会感谢每一个建议。
这条线
string passwordPattern = "\\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\\b";
在 C# 中意味着passwordPattern
实际上包含以下字符串
\b(?=.*?[A-Z])(?=.*?[0-9]).{6,}\b //notice backslahes count
在 C# 中定义字符串时,反斜杠会转义以下字符。因此,如果您想向\
字符串添加字符,则必须在那里放置双反斜杠\\
。因此,您的服务的问题在于它在模式中返回了额外的反斜杠。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句