有更好的方法吗?我无法弄清楚如何添加(?i)
所以我可以使模式全局不区分大小写,同时仍然将语句保持为否定。
[Required(ErrorMessage = "Address")]
[RegularExpression("^(?!.*(p|P)\\.?(o|O)\\.?\\s+?(box|Box|BOX)).*$", ErrorMessage = "We cannot ship to PO boxes")]
public string CustomerAddress1 { get; set; }
答案 0 :(得分:3)
我测试了这一点,只是将(?i)
添加到开头(正如@sln所说)对我来说很好。
这是我的测试代码,在控制台应用中:
static void Main(string[] args)
{
TestForPoBox("PO BOX 111");
TestForPoBox("P.O. Box 222");
TestForPoBox("p.O. boX 333");
TestForPoBox("444 Main Street");
Console.ReadKey();
}
static void TestForPoBox(string streetAddress)
{
const string pattern = "(?i)^(?!.*p\\.?o\\.?\\s+?box).*$";
Match match = Regex.Match(streetAddress, pattern);
//Write out the matches
if (match.Length > 0)
Console.WriteLine("OK. Address is not a P.O. Box: " + streetAddress);
else
Console.WriteLine("INVALID. Address contains a P.O. Box: " + streetAddress);
}
这是输出:
INVALID. Address contains a P.O. Box: PO BOX 111 INVALID. Address contains a P.O. Box: P.O. Box 222 INVALID. Address contains a P.O. Box: p.O. boX 333 OK. Address is not a P.O. Box: 444 Main Street
<小时/> 编辑:我道歉;我只是在纯粹的C#端试了这个。有了你正在做的MVC模型验证,你需要一个适用于C#和JavaScript的Regex表达式。从本质上讲,C#支持
(?i)...
表示不区分大小写,而JavaScript支持/.../i
。但两种符号都不适用于另一种。你可能做的最好的是你已经拥有的东西(拼写出p|P
,o|O
等),或者像杰里米库克那样的自定义RegularExpressionWithOptions
属性{{3 }}。
答案 1 :(得分:-1)
您可以在比较期间对字符串使用.tolower()方法。