2017-11-04 127 views
1

我有第一个包含数字或字母或连字符的字符串。如果第一个字符是数字,那么第二个字符应该是字符,其余的应该是数字,字母和连字符的任何出现。第一个字符可能是字符串第二个字符应该是数字,其余的应该是字母数字

我试着用:

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

字符串是有效的:在字符串

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

例如:

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-]) 

但这个工作做好了前两个字符。但是如果有两个以上的字符,那么这是不正确的。

+0

这气味像功课。你有尝试过一个正则表达式吗? –

+0

是的我开始于:([A-Za-z - ])(?![A-Za-z-])。这可以达到2个字符,意味着达到了一半的条件。如果我有超过2个字符的字符串,它不会给出所需的结果。我唯一的问题是如何扩展这个正则表达式 – amit

+0

根据您提供的数据,也许这[正则表达式](https://regex101.com/r/2nYe49/1)'^(?=。{0,63} $)( ?:[a-zA-za-z - ] [A-Za-z \ d - ]?\ d [A-Za-z - ])[A-Za-z - ] * $'可以帮助你 –

回答

0

尝试

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

与标志 “多行,忽略大小写” 为

11testisgoingoninvalid 
;1testingisgoingonnvalid 
1;testingisgoingoninvalid 
a;testingisgoingoninvalid 
;atestingisgoingoninvalid 
-testingisgoingonvalid 
atestingisgoingonvalid 
aatestingisgoingonvalid 
a1testingisgoingonvalid 
1atestingisgoingonvalid 
1-testingisgoingonvalid 
-1testingisgoingonvalid 
a-testingisgoingonvalid 
-atestingisgoingon 

https://regexr.com/

说明:

添加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 
相关问题