我正在尝试构建一个仅接受字母数字 ( ) 的正则表达式,字符串中间的[a-zA-Z0-9]
单个连字符 ( ) 除外,最少 9 个字符,最多 20 个字符。-
我已经验证了以下表达式,它接受中间的连字符。
/^[a-zA-Z0-9]+\-?[a-zA-Z0-9]+$/
如何为上述正则表达式设置最少 9 个和最多 20 个字符?我已经在上面的表达式中+
使用了量词。?
我将如何应用于{9,20}
上述表达式?表达方式还有其他建议吗?
我正在尝试构建一个仅接受字母数字 ( ) 的正则表达式,字符串中间的[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
标志不区分大小写匹配并避免重复小写和大写字母。
然后将您的问题分为两种情况:
您可以使用积极的前瞻来检查第二个,例如
/^(?=.{10,21}$)/i
在不消耗字符的情况下检查字符数。
将这些结合在一起可以为您提供
/^(?:[a-z0-9]{9,20}|(?=.{10,21}$)[a-z0-9]+-[a-z0-9]+)$/i
如果您不想-
完全出现在中间,您可以这样做
/^(?=[^-]+-?[^-]+$)[a-zA-Z\d-]{9,20}$/
[^-]
匹配任何不是的字符-