正则表达式在输入开始时允许字符串确定

时间:2013-11-26 18:01:03

标签: jquery html regex validation

我使用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.comsub.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])"

我是正则表达式的新手。我在这做错了什么?

2 个答案:

答案 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. 如果您想要精确匹配一系列字符,请将每个字符放在其自己的[]括号中,一个接一个。所以你想[*][.],匹配*.,而不是[*.](匹配 * {{1 ,但不是两个)。
  2. 我使用.
  3. 在开始时将*.作为可选项
  4. 您应该使用?^围绕整个事物,以便它匹配整个字符串,而不仅仅是字符串中的域(例如“不属于domain.com匹配”将匹配因为“domain.com”)。
  5. 中间匹配子域分隔符中的点未被转义,这告诉Regex允许任何字符,因此$有效。我使用sub#domain.com对其进行了转义,因此它只匹配\.字符。
  6. 这是一个小提示,展示了与此表达式相匹配的内容:

    http://www.rexfiddle.net/s7iXFLR

答案 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] )?
 )
 $