我有以下输入字符串,我需要一个正则表达式来验证输入。
.after()
这是我的正则表达式,它可以正常运行,但无法成功验证输入:
test.test = OK
test.test.1 = OK
test.text* = OK
test.test. = NO
test.test.* = NO
test = NO
我如何使它工作?
答案 0 :(得分:1)
您可以使用
^(?!.*[.*]{2})[a-z0-9*_:-]+(?:\.[a-z0-9*_:-]+)+$
请参见regex demo(在regexstorm中,行尾为CRLF,\r?
仅用于多行字符串演示目的)。
详细信息
^
-字符串的开头(?!.*[.*]{2})
-不允许连续两个.
和*
[a-z0-9*_:-]+
-1个或多个ASCII小写字母,数字,*
,_
,:
或-
(?:\.[a-z0-9*_:-]+)+
-1次或多次连续出现
\.
-一个点[a-z0-9*_:-]+
-1个或多个ASCII小写字母,数字,*
,_
,:
或-
$
-字符串的结尾。答案 1 :(得分:1)
我认为这可以解决您的问题。
^[a-z0-9]+\.[a-z0-9]+((\.[a-z0-9]+)|\*)?$
说明
^
-字符串的开头。
[a-z0-9]
-此范围内的任何字符均有效。
+
-一个或多个。
\.
-匹配文字。 (句点)。
((\.[a-z0-9]+)|\*)?
-
(\.[a-z0-9]+) - this sub-group checks for . followed by any digit or characters
\* - matches for asterisk
? - make the preceding group optional.
$
-锚定到行尾
答案 2 :(得分:0)
根据您给出的有效和无效的文本样本,我得出以下结论,
abc.xyz
或aaa.bbb.ccc
.abc
或abc.aaa.
test.text*
很好,因为test.text
很好,但是test.text.*
不好,因为test.text.
不好。考虑到这些规则,您可以使用以下正则表达式,
^\w+(\.\w+)*(?<!\.)[*]?$
说明:
^
->字符串开头\w+
->匹配一个或多个长度的单词(\.\w+)*
->匹配零个或多个开头的单词字符,零个或多个匹配单个文字点。(?<!\.)[*]?
->可以在字符串的末尾选择星号字符,但不能在其后加上文字点$
->输入结束。