第一个字符可以是字符串第二个字符应该是数字,其余应该是字母数字

时间:2017-11-04 02:40:06

标签: c# .net regex

我的字符串首先包含数字或字母或连字符。如果第一个字符是数字,那么第二个字符应该是字符,休息应该是数字,字母和连字符的任何出现。

我尝试过:

([A-Za-z-]{1})(?![A-Za-z-]{1})([A-Za-z-]{61})

字符串有效:

  1. 如果只有字母表中的字母和字符串中的一个字符。
  2. 如果只有字符串中的连字符和字符串中的一个字符。
  3. 如果第一个字符是数字,则第二个字符应为字母或连字符,其余可以是字母,数字或连字符。
  4. 不允许使用特殊字符或制表符或空格连字符。
  5. 字符串的最大长度为63个字符。
  6. 例如:

    1 : invalid
    11 : invalid 
    ;1 : invalid
    1; : invalid
    a; : invalid
    ;a : invalid
    - : valid
    a : valid
    aa : valid
    a1 : valid
    1a : valid
    1- : valid
    -1 : valid
    a- : valid
    -a : valid
    
    11testisgoingon : invalid 
    ;1testingisgoingon : invalid
    1;testingisgoingon : invalid
    a;testingisgoingon : invalid
    ;atestingisgoingon : invalid
    -testingisgoingon : valid
    atestingisgoingon : valid
    aatestingisgoingon : valid
    a1testingisgoingon : valid
    1atestingisgoingon : valid
    1-testingisgoingon : valid
    -1testingisgoingon : valid
    a-testingisgoingon : valid
    -atestingisgoingon : valid
    
    ([A-Za-z-])(?![A-Za-z-])
    

    但这适用于前两个角色。但是如果有两个以上的字符则不正确。

1 个答案:

答案 0 :(得分:0)

尝试

^(([0-9][a-z-][a-z0-9-]{0,60})?(-?[a-z0-9])?([a-z0-9]-?)?([a-z-][a-z0-9-]{0,62})?){1}$

带有标记" Multiline,IgnoreCase"对

11testisgoingoninvalid 
;1testingisgoingonnvalid
1;testingisgoingoninvalid
a;testingisgoingoninvalid
;atestingisgoingoninvalid
-testingisgoingonvalid
atestingisgoingonvalid
aatestingisgoingonvalid
a1testingisgoingonvalid
1atestingisgoingonvalid
1-testingisgoingonvalid
-1testingisgoingonvalid
a-testingisgoingonvalid
-atestingisgoingon
<{3>}中的

说明:

将IgnoreCase标记添加到正则表达式或将A-Z添加到任何[a-z]

^((...)?(...)?(...)?(...)?){1}$
    ->  We set up an outer capturing group containing 
        4 inner ones wich may or may no occure. In total 
        only 1 must match.  
        The capturing group must fill the whole line, and
        the inner caputring groups model your requirements:

    ([0-9][a-z-][a-z0-9-]{0,60})?    
         -> STARTS with numeric, 
             followed by alphabetic or hyphen, 
             followed by anything 
             up to 63 characters in total   

    (-?[a-z0-9])?   
    ([a-z0-9]-?)?
        -> one character prefixed/followed by hyphen

    ([a-z-][a-z0-9-]{0,62})?
        -> generic long text not started by numeric
            followed by anything
            up to 63 characters long