Regex只接受字母数字,除了在中间的一个连字符
Regex which accepts alphanumerics only, except for one hyphen in the middle
我正在尝试构造一个正则表达式,该表达式只接受字母数字([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
您可以这样做,前提是您不希望-
正好出现在的中间
/^(?=[^-]+-?[^-]+$)[a-zA-Z'd-]{9,20}$/
[^-]
匹配任何不是-
的字符
相关文章:
- 如何使用JS在中间输入文本中动态插入字符
- 跳过用户输入的文本字符串中的特殊字符,并在 Javascript 中的每个单词后添加连字符
- 在数组中的偶数之间插入连字符
- 在javascript中组合使用连字符连接的两个字符串
- 如何在焦点上隐藏jquery掩码中的括号和连字符
- 在 3 位和 6 位数字后插入空格或连字符,前缀为 +91
- JS正则表达式在数据表中用连字符匹配整个单词
- 在 javascript 中大写带连字符的名称
- 在 n 个字符之后剪一个字符串,但如果它在一个单词的中间,则剪掉整个单词
- 在 javascript 中查找非单词、非空格和非连字符
- 正则表达式只允许在第一位使用连字符
- 将空格和空格替换为逗号,并在 JS 中使用连字符
- 仅在必要时对文本进行连字符,以防止容器溢出
- 尝试在煎茶面板中使用连字符文本,但不成功
- 在 Javascript 中使用连字符验证电话号码
- 按enter键时,在文本区域添加连字符
- 在html/css/javascript的命名约定中不使用连字符时
- 在AngularJS中,当指令属性的作用域变量基于camelBase时,为什么它们需要用连字符分隔
- Regex只接受字母数字,除了在中间的一个连字符
- Regex:电子邮件验证,只允许在域名和顶级域名中间出现连字符