我正在尝试构造一个仅接受字母数字的正则表达式 ([a-zA-Z0-9]
),但单个连字符 (-
) 除外字符串的中间,最少 9 个字符,最多 20 个字符。
我已经验证了以下表达式,它接受中间的连字符。
/^[a-zA-Z0-9]+\-?[a-zA-Z0-9]+$/
如何为上述正则表达式设置最少 9 个字符和最多 20 个字符?我已经在上面的表达式中使用了量词 +
和 ?
。
如何将 {9,20}
应用于上述表达式?对于表达还有其他建议吗?
最佳答案
/^[a-zA-Z0-9]+\-?[a-zA-Z0-9]+$/
可以简化为
/^[a-z0-9]+(?:-[a-z0-9]+)?$/i
因为如果没有破折号,那么您不需要在其后查找更多字母,并且您可以使用 i
标志来不区分大小写地匹配,并避免必须重复两个小写 -大小写和大写字母。
然后将您的问题分为两种情况:
- 9-20 个字母数字
- 10-21 个字符,除一个破折号外均为字母数字
您可以使用正向前瞻来检查第二个,例如
/^(?=.{10,21}$)/i
检查字符数而不消耗它们。
将这些组合在一起可以得到
/^(?:[a-z0-9]{9,20}|(?=.{10,21}$)[a-z0-9]+-[a-z0-9]+)$/i
关于javascript - 正则表达式仅接受字母数字,中间的一个连字符除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599508/