javascript - 正则表达式仅接受字母数字,中间的一个连字符除外

标签 javascript regex validation

我正在尝试构造一个仅接受字母数字的正则表达式 ([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 标志来不区分大小写地匹配,并避免必须重复两个小写 -大小写和大写字母。

然后将您的问题分为两种情况:

  1. 9-20 个字母数字
  2. 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/

相关文章:

javascript - 将地理位置坐标存储到 websql 数据库中的最佳方法,也可以在输出后在谷歌地图中工作

javascript - 仅替换部分正则表达式匹配

html - 允许用户输入 HTML - 这明智吗?

javascript - 如何在不加载两次的情况下在网站上两次显示相同的 HTML 5 视频?

javascript - 根据div的内部文本计算高度

node.js - 正则表达式在 mongodb 命令行中工作,但不适用于 mongoose

Python re.match 需要更长的时间来匹配这个

c# - 如何在 .NET 中验证后将焦点设置到控件

域模型中的验证?

javascript - window.location.href 在 IE9 下不工作