【问题标题】:Regular Expression in C# for either empty, 0, or a length 5 digit. (Zip Code)C# 中的正则表达式,用于空、0 或长度为 5 位的数字。 (邮政编码)
【发布时间】:2015-06-20 00:02:56
【问题描述】:

我被这个问题困住了。我有一个邮政编码的输入字段,但是,我们的数据库有很多邮政编码为 0 的记录。我目前在该字段上设置了一个正则表达式,以确保邮政编码为空或 5 位值.

但是,因此,如果您要更新值设置为“0”的记录,则会触发验证消息,因为它不是空字符串或 5 位字符串。我想让它能够接受所有这三种状态(空、“0”或 5 位数字)。

(^\s{0,5}$)|(^\d{5}$) - 这是我一直使用的空数字或 5 位数字,它似乎工作正常。

(^?:(\s{0}$)|(^?:(0){1}$|\d{5})$) - 我试过这个空的,“0”或5位数字,但它不起作用。我真的不知道发生了什么,我几乎不懂正则表达式。将不胜感激,谢谢!

【问题讨论】:

  • ReGex 用于匹配模式,你不能匹配不存在的东西——你应该使用String.IsNullOrEmpty()
  • 5位数字可以是“00000”吗?
  • 你的字段有空格吗?试试(^\s{0,5}(?:0)?$)|(^\d{5}$)

标签: c# regex


【解决方案1】:

我会选择:

(^([0]|[0-9]{5})$)

输入为 0 或任意 5 位数字组合。

正如评论中所指出的,正则表达式是用来匹配的,没有的时候就无法匹配

【讨论】:

  • 成功了。这正是我想要的方式!谢谢。
  • 这不会匹配空字符串。添加可选限定符:^(0|[0-9]{5})?$
【解决方案2】:

不要使用正则表达式检查空字符串:

if String.IsNullOrEmpty(myString)
{
    // String is empty, do something.
    Console.WriteLine("No string here!");
}
else
{
    // Do Regex here
}

【讨论】:

  • 确实不能,因为空字符串的正则表达式匹配 all 字符串。 :)
  • tbh 我从来没有尝试过匹配正则表达式中的空字符串,因为我从来没有使用过无法检查 NullEmpty 的语言,但你每天都会学到新东西:)
【解决方案3】:

您将始终希望匹配字符串的开头和结尾,因此您不需要在 Regex 组中使用它们。至于速记字符'\s',这只是代表一个空格。

您要匹配的内容:

  • 空字符串
  • 单零
  • 五位数字

为此,希望以下内容可行:

^(\s{0}|0|\d{5})$

【讨论】:

    【解决方案4】:

    使用这个正则表达式(^$)|0|\d{5}

    string.IsNullOrEmpty()int.Parse() 是首选。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多