我有一段代码,用于在尝试提交代码之前验证所提供的2FA代码是否符合要求。为此,我基于提供的枚举位集构建了一个正则表达式,然后执行Regex.IsMatch()
。
我遇到的问题是Regex.IsMatch()
和Regex.Match().IsSuccessful
都在传递空字符串时都返回true。在我的测试中,AuthenticationType
的值仅设置为Numeric
,而CodeLength
的值设置为6。我还使用VS调试器评估了所得的regex字符串,它与预期的{ {1}},但我看不到为什么对于空字符串它返回true。
当我有一个有效的代码时,我真正的问题是为什么会发生这种情况,所以我看不到为什么基于MS文档,并且对于此行为,是否有比我当前的解决方案“更正确”的解决方案?
^[\d]{6}
答案 0 :(得分:1)
只需交换Regex.IsMatch(strRegex.ToString(), AuthenticationCode)
(应为Regex.IsMatch(AuthenticationCode, strRegex.ToString())
)
如Regex.IsMatch() documentation中所述:第一个参数为input
字符串,第二个参数为regex pattern
答案 1 :(得分:1)
操作数顺序错误。
我更喜欢使用较短的语法,这样可以避免这种陷阱:
strRegex.IsMatch(AuthenticationCode);