【问题标题】:first character could be string second character should be numeric and rest should be alphanumeric第一个字符可以是字符串第二个字符应该是数字,其余应该是字母数字
【发布时间】:2018-04-16 20:08:32
【问题描述】:

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

我试过了:

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

但这对前两个字符很有效。但如果有两个以上的字符,那就不正确了。

【问题讨论】:

  • 这闻起来像家庭作业。你试过正则表达式了吗?
  • 是的,我从:([A-Za-z-])(?![A-Za-z-]) 开始。这适用于最多 2 个字符,这意味着满足一半条件。如果我有超过 2 个字符的字符串,它不会给出预期的结果。我唯一的疑问是如何扩展这个正则表达式
  • 根据您提供的数据,也许这个regex^(?=.{0,63}$)(?:[a-zA-Za-z-][A-Za-z\d-]?|\d[A-Za-z-])[A-Za-z‌​-]*$可以帮助您

标签: c# .net regex


【解决方案1】:

试试

^(([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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    相关资源
    最近更新 更多