我试过几次,都没能成功。我需要排除邮政信箱。我以为我只能用它来包装?!…但它不起作用。有什么想法吗?

^((?i)[P|p]*(OST|ost)*\.*\s*[O|o|0]*(ffice|FFICE)*\.*\s*[B|b][O|o|0][X|x]\s*(\d.))*$

编辑:对不起,这是我要找的。
示例:当输入为“邮政信箱”或“邮局”时,我需要regex为false。当输入为7821 test street时,我需要regex为true。
我正试图在一个asp.net mvc项目中使用它
/// <summary>
/// Regex for street fields
/// </summary>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple =     false)]
public class StreetAddressAttribute : RegularExpressionAttribute, IClientValidatable
{
/// <summary>
/// Regular expression validation for street field
/// </summary>
public StreetAddressAttribute()
  : base(@"^(?!(?i)[P|p]*(OST|ost)*\.*\s*[O|o|0]*(ffice|FFICE)*\.*\s*[B|b][O|o|0][X|x]\s*(\d.)*)$")
{
}

 /// <summary>
 /// Client side validation
 /// </summary>
 /// <param name="metadata">Modelmetadata</param>
 /// <param name="context">ControllerContext</param>
 /// <returns>Client-side validation rules</returns>
 public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata    metadata, ControllerContext context)
 {
   yield return new ModelClientValidationRule { ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()), ValidationType = "streetaddress" };
 }
}

谢谢你的帮助

最佳答案

你的regex有很多问题,我试着一个接一个地解决
在字符类中,不需要将|作为or。里面的每个字符都被添加到允许的字符列表中。因此,执行[P|p]允许使用三个字符“p”、“p”和“”。
正确的类是[Pp]
您可以使用inline修饰符(?i)。这使得下面的字母都是大小写独立的。所以[Pp]是不必要的,只要p足以匹配字母“p”和“p”。
包括前两个问题,我们可以将您的表达式更改为

^(?!(?i)p*(ost)*\.*\s*[Oo0]*(ffice)*\.*\s*b[o0]x\s*(\d.)*)$

您通过b[o0]x量词使除*可重复0次或多次之外的所有内容都可重复。我很确定这不是你想要的,还是你想找到像“ppppppp ostostb0x”这样的东西?
当输入为“邮政信箱”或“邮局”时,为false的regex更像这样:
^(?i)(?!p\.?o\.?\sbox|post\soffice).*$

这个正则表达式将匹配每个字符串(因为结尾处有.*),除了像这样开头的字符串:
邮政信箱
邮政信箱
邮政信箱
邮局
邮局

10-06 12:05