regex 正则表达式:在任何一个问题上匹配,文本中的标记或空格

osh3o9ms  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(107)

我在.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视图上使用这样的代码:

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;
}

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

j91ykkif

j91ykkif1#

你也可以试试

^[^?\s]*$

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

4c8rllxm

4c8rllxm2#

不如这样:

[\s?]+

参见Positive character group
+用于 * 一个或多个示例 *,因为您说的是“Glenn?测试”应该匹配。如果你想让它正好是一个或两个示例,就把它改成像{1,2}这样的字符串。

Glenn[\s?]+Test

如果您只想验证字符串中是否出现了空格或问号,那么简单的[\s?]就可以了。

更新

你要做的是 * 验证 * 字符串,也就是说,检查它是否 * 满足给定的要求。如果它 * 不 *,则显示错误消息。您当前的正则表达式,检查^\S*$不会查找一个字符串,它说“从开始(^)到结束($),所有字符必须匹配模式\S*,这是零个或多个 anything-but-a-space 的示例”。
您可以相应地更新模式:

^[^\s?]*$

它会说“整个字符串(再次,^...$)必须仅由 * 不在 * 当前集合([^...]))中的字符组成”。

hfyxw5xn

hfyxw5xn3#

更新后,您需要:

^[^\s?]*$

在这里看到它online on Regexr
[^\s?]是一个求反字符类,它将匹配除空格和问号之外的任何字符。
在线测试工具部分:

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

相关问题