正则表达式字符串最多20个字符长逗号

时间:2011-03-02 17:41:27

标签: regex

我需要为具有以下要求的字符串定义正则表达式:

  • 最多20个字符
  • 必须采用Name,Surname
  • 格式
  • 不允许使用数字和特殊字符(再次,它是姓名和姓氏)

我已经尝试了类似^[^1-9\?\*\.\?\$\^\_]{1,20}[,][^1-9\?\*\.\?\$\^\_\-]{1,20}$的内容,但正如您所发现的,它也匹配40个字符长的字符串。

如何查看整个字符串的最大长度,同时在其中加入1个逗号,显然不在边框处?

谢谢

6 个答案:

答案 0 :(得分:6)

试试正则表达式:

^(?=[^,]+,[^,]+$)[a-zA-Z,]{1,20}$

Rubular Link

说明:

^                : Start anchor
(?=[^,]+,[^,]+$) : Positive lookahead to ensure string has exactly one comma
                   surrounded by atleast one non-comma character on both sides.
[a-zA-Z,]{1,20}  : Ensure entire string is of length max 20 and has only 
                   letters and comma
$                : End anchor

答案 1 :(得分:5)

您可以使用前向否定断言来执行此操作:

^(?!.{21})[A-Za-z]+,[A-Za-z]+$

正则表达式现在包含两部分,实际定义和开头的声明,说从那时起,不会有21个字符。

修改

因此,对于上述定义,正则表达式变为

^(?!.{21})[^1-9\?*\.\?\$\^_\,]+,[^1-9\?*\.\?\$\^_\,]+$

答案 2 :(得分:4)

显而易见的答案是:不要在同一个输入栏中询问姓名和姓氏。

如果你还想这样做:我不知道有什么简单的方法,但这是有可能的。要查看原则,请考虑[^1-9\?\*\.\?\$\^\_\,]而不是X(我添加了\,,因为它很重要: - ))。

^(X{1},X{19})|(X{2},X{18})|...|(X{19},X{1})$

相当难看,但应该有用。

另请注意:您不会使用独家范围捕获几乎所有特殊字符。但它可能仍然比包容范围更好。

答案 3 :(得分:0)

正如我所说,我认为说明了你的方式,它不能用正则表达式匹配 - 它是一种下推式语言。

但是,您可以始终拆分','并匹配每个子字符串,然后匹配总数。

答案 4 :(得分:0)

您是否尝试过您的示例,但删除了:

{1,20} 

在中间,离开

[编辑删除了您已经尝试过的示例但它们无效:]

试试这个吗?

^[[^1-9\?\*\.\?\$\^\_],[^1-9\?\*\.\?\$\^\_\-]]{1,20}$

答案 5 :(得分:-2)

([a-zA-Z]{1,20}),([a-zA-Z]{1,20})

更新:

[[a-zA-Z],[a-zA-Z]]{1,20}