我需要为具有以下要求的字符串定义正则表达式:
Name,Surname
我已经尝试了类似^[^1-9\?\*\.\?\$\^\_]{1,20}[,][^1-9\?\*\.\?\$\^\_\-]{1,20}$
的内容,但正如您所发现的,它也匹配40个字符长的字符串。
如何查看整个字符串的最大长度,同时在其中加入1个逗号,显然不在边框处?
谢谢
答案 0 :(得分:6)
试试正则表达式:
^(?=[^,]+,[^,]+$)[a-zA-Z,]{1,20}$
说明:
^ : 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}