我在.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验证吗?
答案 0 :(得分:3)
您也可以尝试
^[^?\s]*$
匹配任何既不包含空格也不包含问号的字符串。
答案 1 :(得分:2)
这个怎么样:
[\s?]+
+
适用于一个或多个实例,因为您正在说"格伦?测试"应该匹配。如果您希望它恰好是一个或两个实例,则将其更改为{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\?].+