RegEx禁止两个P.O. Box和RR在街道地址文本框中

时间:2011-08-10 16:10:46

标签: c# asp.net regex

我有一个正则表达式验证器控件,用于验证街道地址文本框控件。

到目前为止,我有一个RegEx,它成功地从控件中为P.O.的所有常见形式生成错误消息。框。

^(?i)(?!.*P\.? ?O\.? ?Box)[-a-z\d .,/]*$

我还想禁止' RR '和'农村路线'。

对于它的价值,这里有一些我在尝试重写此RegEx时一直使用的参考文献:

P.O。 Box RegEx: Testing for a PO Box in all of its forms

农村路线RegEx: C#: Determing if string is like this pattern; possible regex

2 个答案:

答案 0 :(得分:0)

是否值得编写一个自定义验证器,它只检查包含一些选项的字符串,如“PO”,“P.O。”,“RR”,“乡村路线”。

正则表达式是一个非常强大的工具,但不易维护。如果您可以编写更易于理解的代码,即使需要更长时间,那么从长远来看,这几乎总是一场胜利。

最后,我不确定你在寻找什么甚至完全可能在正则表达式。您可以选择不对某些文本进行有效捕获,但由于文本的其余部分将具有有效捕获,因此验证程序可能仍会通过。

答案 1 :(得分:0)

也许我误解了这个问题,但我没有看到任何正则表达式。做这样的事情,你可以在字符串的任何部分排除多个单词。

IEnumerable<string> disallow =  new String[] { "RR", "Rural Route", "Box"};
bool invalidAddress = false;

string address = "1728 Box 12".ToLower();

foreach (var item in disallow)
{
    if (address.Contains(item.ToLower()))
        invalidAddress = true;
}