【发布时间】:2009-12-15 18:50:46
【问题描述】:
我需要验证序列号。为此,我们在 C# 中使用正则表达式,并且某个产品,序列号的一部分是“自午夜以来的秒数”。一天有 86400 秒,但是如何验证它是这个字符串中的 5 位数字呢?:
654984051-86400-231324
我不能用这个概念:
[0-8][0-6][0-4][0-0][0-0]
因为那时86399 将无效。我该如何克服呢?我想要类似的东西:
[00000-86400]
更新
我想明确表示我知道 - 并同意 - “当有更简单的方法时不要使用正则表达式” 学派。 Jason's answer 正是我想要的,但是这个序列号验证适用于通过我们系统的所有序列号 - 目前没有针对这些特定序列号的自定义验证代码。 在这种情况下我有充分的理由寻找正则表达式解决方案。
当然,如果没有,那么这使得对这些特定产品进行自定义验证的理由不可否认,但我想在采用需要更改代码的解决方案之前充分探索这一途径。
【问题讨论】:
-
有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。 ——杰米·扎温斯基
-
不是真的,但我似乎不记得我读过的博客文章。仍然是一个很好的报价......
-
@benjamin 我不是那些人中的一员,实际上我做出了一个合理且合理的决定来在这种情况下使用正则表达式。我真的不想使用它们,但如果有一个有效,那将是一个配置更改。如果没有,我需要编写自定义验证代码,那么这对我们的系统影响更大,并且会带来更多开销。
-
如果正则表达式是您唯一的工具,在这种情况下,您可以考虑不使用
c#标记您的问题。 -
刚刚理解了您所说的“代码更改”等的含义。我以前曾研究过一些人所说的“遗留”系统,所以我想我知道您的意思。它确实使它成为一个艰难的选择......我很想说制作这样一个正则表达式将是一个很好的妥协,但我不想成为“下一个人”,当有一个错误。添加这个验证逻辑真的是一个巨大的变化吗?只做正则表达式似乎是以后会后悔的事情。