【发布时间】:2013-05-23 19:54:21
【问题描述】:
我尝试了一些方法,但无法使其正常工作。我需要排除邮政信箱。我以为我只需要用 ?!.. 包裹它,但它不起作用。有什么想法吗?
^((?i)[P|p]*(OST|ost)*\.*\s*[O|o|0]*(ffice|FFICE)*\.*\s*[B|b][O|o|0][X|x]\s*(\d.))*$
编辑:对不起,这就是我要找的。p>
示例:当输入为“邮政信箱”或“邮局”时,我需要正则表达式为假。当输入为 7821 Test street 时,我需要正则表达式为真。
我正在尝试在 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" };
}
}
感谢您的帮助
【问题讨论】:
-
您能用现实世界的术语解释一下您希望匹配哪些可能的值吗?
-
是否要排除所有邮政信箱甚至 APO 邮箱(海外美军)?
-
我不会使用正则表达式(因为那只是添加一个新问题)。我认为一个更简单的“字符串包含'po box'、'p.o. box'、'post office box'等中的任何一个”效果更好。
-
为什么不匹配邮政信箱然后否定返回值?
-
我可以尝试重新思考整个事情。但是,我目前无法否定返回值,因为正则表达式只是作为属性发送到浏览器: data-val-regex-pattern="^(?!(?i)[P|p]*(OST| ost)*\.*\s*[O|o|0]*(办公室|FFICE)*\.*\s*[B|b][O|o|0][X|x]\s*( \d.)*)$"
标签: c# regex street-address