【发布时间】:2018-04-16 20:08:32
【问题描述】:
我的字符串首先包含数字、字母或连字符。如果第一个字符是数字,那么第二个字符应该是字符,其余字符应该是任何出现的数字、字母和连字符。
我试过了:
([A-Za-z-]{1})(?![A-Za-z-]{1})([A-Za-z-]{61})
字符串有效:
- 如果字符串中只有字母和字符串中的一个字符。
- 如果字符串中只有连字符且字符串中有一个字符。
- 如果第一个字符是数字,那么第二个字符应该是字母或连字符,其余字符可以是字母、数字或连字符。
- 不允许有特殊字符、制表符或空格,只能使用连字符。
- 字符串的最大长度为 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-]*$可以帮助您