我在.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验证吗?
3条答案
按热度按时间j91ykkif1#
你也可以试试
它匹配任何既不包含空格也不包含问号的字符串。
4c8rllxm2#
不如这样:
参见Positive character group
+
用于 * 一个或多个示例 *,因为您说的是“Glenn?测试”应该匹配。如果你想让它正好是一个或两个示例,就把它改成像{1,2}
这样的字符串。如果您只想验证字符串中是否出现了空格或问号,那么简单的
[\s?]
就可以了。更新
你要做的是 * 验证 * 字符串,也就是说,检查它是否 * 满足给定的要求。如果它 * 不 *,则显示错误消息。您当前的正则表达式,检查
^\S*$
不会查找一个字符串,它说“从开始(^
)到结束($
),所有字符必须匹配模式\S*
,这是零个或多个 anything-but-a-space 的示例”。您可以相应地更新模式:
它会说“整个字符串(再次,
^...$
)必须仅由 * 不在 * 当前集合([^...])
)中的字符组成”。hfyxw5xn3#
更新后,您需要:
在这里看到它online on Regexr
[^\s?]
是一个求反字符类,它将匹配除空格和问号之外的任何字符。在线测试工具部分:
还有一个answer on Programmers by me,我在这里列出了有用的(大多是在线的)Regex资源(这是我的主观列表,对我有用的,绝不是完整的)