我使用jqBootstrapValidation将以下正则表达式嵌入HTML表单中,以半验证基本CSR生成器的FQDN。
regex="(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])"
我希望能够在开头允许*.
个字符,以便允许输入通配符域。
e.g。允许*.example.com
以及example.com
和sub.example.com
我尝试在前面添加([*.]?)
以获取以下内容:
regex="(([*.]?)([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])"
我是正则表达式的新手。我在这做错了什么?
答案 0 :(得分:2)
以下是您应该使用的表达式,每个FQDN:
^(([*][.])?([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])$
你的表达有几个问题:
[]
括号中,一个接一个。所以你想[*][.]
,匹配*.
,而不是[*.]
(匹配 *
或 {{1 ,但不是两个)。.
*.
作为可选项
?
和^
围绕整个事物,以便它匹配整个字符串,而不仅仅是字符串中的域(例如“不属于domain.com匹配”将匹配因为“domain.com”)。$
有效。我使用sub#domain.com
对其进行了转义,因此它只匹配\.
字符。这是一个小提示,展示了与此表达式相匹配的内容:
答案 1 :(得分:2)
SpikeX是一般答案,这是单点域的一个 Edit2: *。单个或多个级别
# ^(\*\.([a-zA-Z0-9]+-)*[a-zA-Z0-9]+\.|(([a-zA-Z0-9]+-)*[a-zA-Z0-9]+\.)+)[A-Za-z]([A-Za-z0-9-]*[A-Za-z0-9])?$
^
(
\*\.
( [a-zA-Z0-9]+ - )*
[a-zA-Z0-9]+
\.
|
(
( [a-zA-Z0-9]+ - )*
[a-zA-Z0-9]+
\.
)+
)
[A-Za-z]
( [A-Za-z0-9-]* [A-Za-z0-9] )?
$
编辑3: Edit2 + localhost
# ^(localhost|(\*\.([a-zA-Z0-9]+-)*[a-zA-Z0-9]+\.|(([a-zA-Z0-9]+-)*[a-zA-Z0-9]+\.)+)[A-Za-z]([A-Za-z0-9-]*[A-Za-z0-9])?)$
^
(
localhost
|
(
\*\.
( [a-zA-Z0-9]+ - )*
[a-zA-Z0-9]+
\.
|
(
( [a-zA-Z0-9]+ - )*
[a-zA-Z0-9]+
\.
)+
)
[A-Za-z]
( [A-Za-z0-9-]* [A-Za-z0-9] )?
)
$
或,在Perl / PCRE中做正义 edit3 ,但不要认为Jquery可以做到(不知道)。
# ^(?:localhost|(?:(\*\.(?:[a-zA-Z0-9]+-)*[a-zA-Z0-9]+\.)|(?1)+)[A-Za-z](?:[A-Za-z0-9-]*[A-Za-z0-9])?)$
^
(?:
localhost
|
(?:
(
\*\.
(?: [a-zA-Z0-9]+ - )*
[a-zA-Z0-9]+
\.
)
|
(?1)+
)
[A-Za-z]
(?: [A-Za-z0-9-]* [A-Za-z0-9] )?
)
$