繁体   English   中英

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

[英]Set limit to length of Regular expression

该行应该是:

  • 从拉丁字母开始
  • 由拉丁字母,数字,点标志组成. 和减号-
  • 字符串应以字母数字结尾
  • 行的最小长度为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);

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

您可以使用

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替换以匹配字符串的最后一端)

尝试这样的事情:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM