我目前拥有的...
^((([A-Za-z])+([A-Za-z0-9\-])*([a-zA-Z0-9])+)*\.)+$
规则:
应匹配的示例:
.
a.
a-9.
abc.
abc.a-c.abc.
不应该匹配的:
-.
-a.
a-.
a
abc.-bc
ab-.abc
abc.a-@c
..
当前不匹配a.
,这是最简单的情况之一。您对如何解决有什么建议?
答案 0 :(得分:1)
/^(?!\-)([A-Z0-9]|[\-\.](?!\.))*\.$/i
这还将处理..
和--
的情况。
试试看。
让我们分解一下:
/
^ Line start
(?!\-) Must not start with -
( Start of matching group
[A-Z0-9] Match list
| OR
[-.](?![-.]) A - or . not followed by - or .
)* End group matching 0 or more times
\. Must end in .
$ Line end
/i Treat as case insensitive
答案 1 :(得分:1)
作为没有环顾四周的替代解决方案,您可以通过匹配a-zA-Z来开始字符串。
然后使用一个可选的模式,该模式匹配零个或多个包含连字符的字符类重复,并以不带连字符的匹配结尾,以防止它出现在重复中的点之前或字符串的末尾。 / p>
启用不区分大小写的功能:
^(?:[a-z](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9-]*[a-z0-9])*)?\.$
部分
^
字符串的开头(?:
非捕获组
[a-z]
匹配单个字符a-z (?:
非捕获组
[a-z0-9-]*
匹配0-次a-z0-9-[a-z0-9]
以a-z-9结尾,因此在-
之前不能有.
)?
关闭组并将其设置为可选(?:
非捕获组
\.[a-z0-9-]*
匹配.
和0+次a-z0-9-[a-z0-9]
以a-z-9结尾,因此在-
之前不能有.
)*
关闭组并重复0次以上)?
关闭组并使其可选以也允许单个点\.
匹配单个点$
字符串结尾答案 2 :(得分:-1)
从左到右:
^
-直播开始,到目前为止一切顺利
(([A-Za-z])+([A-Za-z0-9\-])*([a-zA-Z0-9])+)*
-换句话说,尝试尽可能多地匹配([A-Za-z])+([A-Za-z0-9\-])*([a-zA-Z0-9])+
; 0也可以。
让我们尝试一次匹配它:
([A-Za-z])+
-好的,它将与a
相匹配。
([A-Za-z0-9\-])*
-没有匹配项。
([a-zA-Z0-9])+
-此处匹配失败。这与.
因此,它甚至一次都不匹配,我们在那个大点之后紧跟着*,然后前进:
\.
-不匹配;我们在a
上。