【发布时间】:2015-12-31 13:25:26
【问题描述】:
我必须在 C# 中验证“项目代码”字符串 - 字符串长度可以在 5-10 个字符之间。除此以外的唯一规则如下:
- 第一个字符只能是字母或数字
- 中间字符(如果存在)可以是字母、数字或句点 (.)
- 最后一个字符只能是字母或数字
- *避免中间连续出现多个句号
我可以像这样验证 5-10 个字符的限制:
^(?=.{5,10}$)
第 1 部分和第 3 部分是这样的:
[a-zA-Z0-9]{1}
中间的规则是这样的:
[a-zA-Z0-9.]{0,8}
如果我把它们放在一起,我有这个:
^(?=.{5,10}$)[a-zA-Z0-9]{1}[a-zA-Z0-9.]{0,8}[a-zA-Z0-9]{1}$
它工作正常,但所有几乎相同的代码,似乎可以以某种方式压缩。有任何想法吗?谢谢!
【问题讨论】:
-
你想只允许 ASCII 符号吗?
-
限制比这更进一步——只有英文字母的 26 个字母或数字 0-9
-
只需添加一个前瞻:
(?i)^(?!.*[.]{2})[a-z0-9][a-z0-9.]{3,8}[a-z0-9]$。 -
天哪 - 非常感谢 - 我无法正确理解前瞻的语法。
-
这也可以:
(?i)^(?=.{5,10}$)[a-z0-9]+(?:\.[a-z0-9.]+)*$。前瞻处理所有计数,因此正则表达式的主体只需验证结构(即,每个句点之前和之后都是字母数字,并且没有其他类型的字符)。