c# - 此正则表达式是否允许 "*"?

标签 c# asp.net regex

我真的对正则表达式知之甚少。
我正在尝试测试密码验证。

这是描述它的正则表达式(我没有写,也不知道它是什么意思):

private static string passwordField = "[^A-Za-z0-9_.\\-!@#$%^&*()=+;:'\"|~`<>?\\/{}]";  

我试过像“dfgbrk*”这样的密码,我的代码使用上面的正则表达式,允许它。
这与正则表达式定义为可接受的内容一致,还是我的代码有问题?

您能给我一个不允许使用上述正则表达式进行验证的字符串示例吗?

添加:原始代码使用此正则表达式的方式如下(并且它在那里工作):

public static bool ValidateTextExp(string regexp, string sText)
            {
                if ( sText == null)
                {
                    Log.WriteWarning("ValidateTextExp got null text to validate against regExp {0} . returning false",regexp);
                    return false;
                }

                return (!Regex.IsMatch(sText, regexp));
            }

看来我做错了什么..

谢谢。

最佳答案

您的正则表达式匹配一个值,该值包含该列表中 的任何单个字符。

您的测试值匹配,因为其中有空格,而这些空格似乎不在您的表达式中。

不是的原因是你的字符类以^开头。它匹配任何包含任何单个字符的值的原因是你没有指定字符串的开头或结尾,或任何量词。

以上假设我没有遗漏字符汤中间任何字符的重要性:)

这个答案还取决于您在代码中实际使用 Regex 的方式。


如果您的意图是让该正则表达式字符串代表密码中实际允许的唯一字符,您可以像这样更改正则表达式:

string pattern = "^[A-Z0-9...etc...]+$";

重要的部分有:

  • ^ 已经从括号内移到外面;它表示整个字符串的开始。
  • $ 已添加到末尾,表示整个字符串的结尾。
  • 这些是必需的,否则,您的模式将匹配任何包含有效值的任何内容 - 即使无效值也存在。
  • 最后,我添加了 + 量词,这意味着您想要找到这些有效字符中的任何一个,一次或多次。 (此正则表达式不允许长度为 0 的密码)

如果你想允许 ^ 字符也作为密码的一部分,你可以将它重新添加到括号之间,但*不要作为左括号之后的第一件事 [。例如:

string pattern = "^[A-Z0-9^...etc...]+$";

在正则表达式中,^在不同的地方不同的时间有特殊的含义。

关于c# - 此正则表达式是否允许 "*"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3970857/

相关文章:

ruby - 需要删除字符串末尾的数字

c# - 获取当前打开的文档

c# - 如何在构建过程之外合并 xml app.config 文件

c# - 在轮询数据时保持子进程打开?

c# - 找不到类型或命名空间名称 'ProfileCommon'

asp.net - 如何在设计时获取复合控件的子控件

c# - 在商店应用程序中通过 HTTP POST 发送字节数组

c# - 使用静态表作为动态表的导航属性

regex - 组捕获

javascript - 使用正则表达式分别拆分 = 、 == 和 ===