设置正则表达式的长度限制

时间:2016-09-01 15:15:21

标签: c# regex

该行应为:

  • 从latinic letter开始
  • 由latinic字母,数字,点号.和减号-
  • 组成
  • 字符串应以字母数字
  • 结尾
  • 最小行长为1
  • 行的最大长度为20

我写了以下Regex模式:

string pattern = @"^[A-Za-z]{1}[A-Za-z0-9\-\.]{1,18}[A-Za-z0-9]{1}$";

并且不满足第三,第四和第五条件:

string s1 = "E";   

// Compare a string against the regular expression
var isOK = new Regex(pattern).IsMatch(s1);

你能告诉我创建正则表达式模式的正确方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用

string pattern = @"^[A-Za-z][A-Za-z0-9.-]{0,19}(?<=[A-Za-z0-9])$";

或稍微增强一点,因为它会因非匹配输入而更快失败,并且不会允许任何尾随新行:

string pattern= @"^[A-Za-z][A-Za-z0-9.-]{0,19}\z(?<=[A-Za-z0-9])";

详细

  • ^ - 字符串开头
  • [A-Za-z] - 一封信
  • [A-Za-z0-9.-]{0,19} - 0到19个字母,数字或.-符号
  • (?<=[A-Za-z0-9]) - 之前应该有一个字母数字....
  • $ - 字符串的结尾(最好用\z替换以匹配字符串的末尾)

答案 1 :(得分:1)

尝试这样的事情:

^[A-Za-z]([-.A-Za-z0-9]{0,18}[A-Za-z0-9])?$

首先匹配单个字母字符,然后选择一系列最多18个字母,数字,句号或连字符,以字母数字结尾。如果您愿意,可以在字符类中转义连字符,但如果不这样做,则应将其作为类中的第一个字符,以使其不被解释为范围。将连字符设为类中的最后一个字符适用于某些实现。

https://regex101.com/r/fA8lQ4/3