Regex.IsMatch对于空字符串返回true

时间:2018-10-14 17:58:41

标签: c# regex string

我有一段代码,用于在尝试提交代码之前验证所提供的2FA代码是否符合要求。为此,我基于提供的枚举位集构建了一个正则表达式,然后执行Regex.IsMatch()

我遇到的问题是Regex.IsMatch()Regex.Match().IsSuccessful都在传递空字符串时都返回true。在我的测试中,AuthenticationType的值仅设置为Numeric,而CodeLength的值设置为6。我还使用VS调试器评估了所得的regex字符串,它与预期的{ {1}},但我看不到为什么对于空字符串它返回true。

当我有一个有效的代码时,我真正的问题是为什么会发生这种情况,所以我看不到为什么基于MS文档,并且对于此行为,是否有比我当前的解决方案“更正确”的解决方案?

^[\d]{6}

2 个答案:

答案 0 :(得分:1)

只需交换Regex.IsMatch(strRegex.ToString(), AuthenticationCode)

的参数

(应为Regex.IsMatch(AuthenticationCode, strRegex.ToString())

Regex.IsMatch() documentation中所述:第一个参数为input字符串,第二个参数为regex pattern

答案 1 :(得分:1)

操作数顺序错误。

我更喜欢使用较短的语法,这样可以避免这种陷阱:

strRegex.IsMatch(AuthenticationCode);