我正在尝试构建一个只接受字母数字([a-zA-Z0-9]
)的正则表达式,除了字符串中间的单个连字符(-
),最少9个字符和一个最多20个字符。
我已经验证了以下表达式,它接受中间的连字符。
/^[a-zA-Z0-9]+\-?[a-zA-Z0-9]+$/
如何为上述正则表达式设置最小9个字符和最多20个字符?我已经在上面的表达式中使用了量词+
和?
。
我如何将{9,20}
应用于上述表达式?表达式还有其他建议吗?
答案 0 :(得分:1)
如果您不希望-
完全出现在中间
/^(?=[^-]+-?[^-]+$)[a-zA-Z\d-]{9,20}$/
[^-]
匹配任何不是-
答案 1 :(得分:1)
/^[a-zA-Z0-9]+\-?[a-zA-Z0-9]+$/
可以简化为
/^[a-z0-9]+(?:-[a-z0-9]+)?$/i
因为如果没有破折号,那么你不需要在它之后查找更多的字母,你可以使用i
标志来区分大小写,并避免重复小写和高位 - 大写字母。
然后将您的问题分成两种情况:
您可以使用像
这样的积极前瞻来检查第二个/^(?=.{10,21}$)/i
检查字符数而不消耗它们。
将这些组合在一起可以为您提供
/^(?:[a-z0-9]{9,20}|(?=.{10,21}$)[a-z0-9]+-[a-z0-9]+)$/i