正则表达式:匹配任何一个问题。文字中的标记或空格

时间:2011-12-08 14:00:10

标签: .net regex asp.net-mvc-3 validation

我在.NET(C#4.0)工作;如何编写与包含“?”的文本匹配的表达式或空格'\ S'?

GlennTest    (should not match)
Glenn?Test   (should match) 
Glenn Test   (should match) 
Glenn? Test  (should match) 
Glenn ?Test  (should match) 
?Glenn Test  (should match) 

我可以编写表达式来查找表达式,但是将它们组合在一起会给我带来麻烦。

澄清: 我正在澄清我的问题,因为到目前为止,这两个答案都没有起作用。

我正在编写一个MVC应用程序,其中一个属性具有以下RegExp属性,这似乎按设计工作(不允许空格)。

    [DataMember(Name="Job Code")]
    [Required(ErrorMessage="Job Code is required.")]
    [RegularExpression(@"^\S*$", ErrorMessage = "Spaces are not allowed in the Job Code")]
    public string JobCode { get; set; }

那就是说,我想扩展这种能力以禁止'?'问号也是。

我还希望能够在代码中进行测试,而不是使用以下代码在MVC View上进行测试:

public static bool IsValidCode(string code, out string message)
{
    message = "";
    const string NO_QMS_REG_EXP = @"^\?*$";
    const string NO_SPACES_REG_EXP = @"^\S*$";

    var expr1 = new Regex(NO_QMS_REG_EXP);
    var expr2 = new Regex(NO_SPACES_REG_EXP);
    if (expr1.IsMatch(code))
    {
        message = "Code cannot contain a question mark";
        return false;
    }
    if (expr2.IsMatch(code))
    {
        message = "Code cannot contain a space";
        return false;
    }
    // TODO: One expression that validates both simulatenously??
    return true;
}

MVC3问题:我可以以编程方式执行属性Regex Attrib验证吗?

4 个答案:

答案 0 :(得分:3)

您也可以尝试

^[^?\s]*$

匹配任何既不包含空格也不包含问号的字符串。

答案 1 :(得分:2)

这个怎么样:

[\s?]+

请参阅Positive character group

+适用于一个或多个实例,因为您正在说"格伦?测试"应该匹配。如果您希望它恰好是一个或两个实例,则将其更改为{1,2},如上述字符串中那样。

Glenn[\s?]+Test

如果您只是想验证字符串中的任何位置是否出现空格或问号,则可以使用简单的[\s?]

<强>更新

您正在做的是验证字符串,即检查 是否满足给定要求。如果,则会显示错误消息。您当前的正则表达式,检查^\S*$不会查找字符串,即从开始(^)到结束($)&#34;所有字符必须与模式{匹配} {1}},这是任何东西&#34;的零个或多个实例。

您可以相应地更新您的模式:

\S*

哪个会说&#34;整个字符串(同样,^[^\s?]*$ )必须只包含当前集合中的字符(^...$&#34 ;

答案 2 :(得分:1)

更新后,您需要:

^[^\s?]*$

在此处查看online on Regexr

[^\s?]是一个否定的字符类,它将匹配任何字符,除了空格和问号。

对于在线测试工具的部分:

还有一个answer on Programmers by me,我列出了有用的(主要是在线的)Regex资源(这是我的主观列表,对我有用的东西,绝不是完整的)

答案 3 :(得分:-1)

您的具体案例有以下解决方案

[\s\?].+?\w.+?[\s\?].+?\w.+?[\s\?].+