我很难合并两个正则表达式。
因为我不熟悉它,所以我写了正则表达式:
1)任何字母都不能连续两次,也允许使用符号“'”和“ - ”:
^(?!.*([A-Za-z])\1{2})[-'A-Za-z]{3,50}$
2)一行中不能有两个允许的符号:
^(?!.*([A-Za-z])\1{2})[-'A-Za-z]{3,50}$
它解决了“ - ”和“''”问题,但仍然需要思考一种方法来消除“ - ”或“ - ” -
我正在尝试将它们合并为一个,如下所示:
^(?!.*([A-Za-z])\1{2}|([-'])(?!\2))[-'A-Za-z]{3,50}$
但好像我的手坏了。请告诉我我的错误在哪里?
我想要实现的目标:
1)连续不超过2个字母。
通过:Test
,Teest
失败:Teeest
,tttest
2)连续不超过1个特殊符号(只允许两个 - - 和 - )符号。
通过:Te-st
,tes't
,-test
,'test
,test-
,test'
,T-e-s-t
未通过:Te--st
,tes''t
,-'test
,'-test
,test'-
,test-'
3)最小为3 字母(特殊符号不计)最多为50个符号(特殊符号计数)
通过:Te-s-t
,tes't
,-test
,'test
,test-
,test'
未通过:te-
,-te
,t-e
,'t'
答案 0 :(得分:0)
您可以使用
^(?!.*([A-Za-z])\1{2})(?=(?:[^a-zA-Z]*[a-zA-Z]){3,})(?!.{51})[-']?[A-Za-z]+(?:[-'][A-Za-z]+)*[-']?$
仅出于演示目的,请参阅regex demo(\n
内[^a-zA-Z]
个字符类。)
以下是解释:
^
- 字符串开头(?!.*([A-Za-z])\1{2})
- 连续不允许使用3个相同的字母(?=(?:[^a-zA-Z]*[a-zA-Z]){3,})
- 至少需要3封(连续和非连续)字母(?!.{51})
- 字符串长度不能超过50个符号
[-']?
- 字符串开头的一个或零-
或'
[A-Za-z]+
- 一个或多个字母(?:[-'][A-Za-z]+)*
- 0个或更多序列:
[-']
- '
或-
[A-Za-z]+
- 1+个字母(这实际上不允许连续-
和'
)[-']?
- 字符串末尾的一个或零-
或'
$
- 字符串结尾