Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET中特殊字符的正则表达式验证_Asp.net_.net_Regex_Validation - Fatal编程技术网

ASP.NET中特殊字符的正则表达式验证

ASP.NET中特殊字符的正则表达式验证,asp.net,.net,regex,validation,Asp.net,.net,Regex,Validation,我需要在Regex中验证场景,我正在ASP.NET中使用RegularExpression验证 不应该以空格开始或结束 不包含唯一的空间 整个字符串不应包含两个特殊字符“@”和“?” 有效期: "as#d qwe2", "&^%$$(&+_", "12#$.p" 无效: " ", "asd ", " asd#", "ksdhf?kh", "asdf@asd" 我正在尝试这样做: <asp:RegularExpressionValidator ID="RegularEx

我需要在Regex中验证场景,我正在ASP.NET中使用RegularExpression验证

  • 不应该以空格开始或结束
  • 不包含唯一的空间
  • 整个字符串不应包含两个特殊字符“@”和“?”
  • 有效期:

    "as#d qwe2", "&^%$$(&+_", "12#$.p"
    
    无效:

    "  ", "asd ", " asd#", "ksdhf?kh", "asdf@asd"
    
    我正在尝试这样做:

    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1"
            ErrorMessage="RegularExpressionValidator" 
            ValidationExpression="^[^\s]+(\s+[^@?]+)*[^\s]$">Error</asp:RegularExpressionValidator>
    
    错误
    
    未测试的正则表达式:
    ^([^@?][^@?]*[^@?]|[^@?])$
    当前使用的正则表达式有几个问题:

  • ^[^\s]+
    如果不是以空格字符开头,则几乎匹配所有字符串(因此匹配
    @

  • 由于正则表达式的构造方式,您只能输入长度为2及以上的字符串。这是一个小挫折,但可以避免

  • 我建议使用负数lookaheads,因为在第一个字符上有多个“检查”:

    ^(?!\s|.*\s$)[^?@]+$
    

    如果字符串以
    \s
    开头或以
    \s
    [^@]+
    结尾,则
    (?!\s |.*\s$)
    将阻止匹配,但
    @
    除外。仅限空格的字符串将自动被拒绝,因为仅限空格的字符串必须以空格开头。

    您尝试过什么吗?尝试过“^[^\s]+(\s+[^@?]+)*[^\s]$”,不起作用…您使用的是哪种正则表达式引擎。NET的
    Regex.IsMatch(“,@”^[^][^@?]*[^]$”
    返回
    false
    。这允许字符串以[@?]开头/结尾,并且不允许使用单字符字符串。很好的捕获-改进了。如果我只提供空格,则aspx页面将返回,理想情况下它不应该。。。你测试过它吗?@user3398663我没有aspx来实现你在问题中的代码,但是我在使用基于C#/ASP.NET的正则表达式引擎的正则表达式工具中测试过它,并且上面的内容不匹配仅空格字符串。@user3398663也许你可以尝试使用实际空格“”,而不是
    \s
    ?这只是一个想法。@user3398663我在网上找到了一个IDE,它似乎在用C#工作。其他以空格开头和/或结尾的字符串是否也被发回?以下字符串工作正常:“a”、“a”、“a”。。。。。但只有空间不起作用。