Javascript - 如何检查正则表达式以确保字符串至少包含一个字母/数字序列?

标签 javascript regex

我正在尝试找出正确的正则表达式来检测类似于 2d1h30m10s 的模式,其中任何一个都有效,例如 1h 1h30m30m10s 或这些的任意组合。正则表达式是正确的工具吗?

我试图理解它,无论我做什么,我都会从这些不同的测试中得到false:

/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('2d1h10m10s')
/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('10m10s')
/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('10s')

我在这里缺少什么?

最佳答案

您需要将正则表达式的每个部分设为可选,这样您就可以省略该单元。

您需要从其中一个选项中取出[h]——您匹配12h,但不匹配01h

末尾不应该有 \d

您不允许使用单位数的分钟或秒。也不需要 60s 或 60m,因为那是 1m 和 1h。

/^((0?[1-9]|1[0-2])h)?([1-5]?[0-9]m)?([1-5]?[0-9]s)?$/

DEMO

无需将 hms 放在方括号内,因为它们只是单个字符。

请注意,由于每个单元都是可选的,因此这也将匹配空字符串。您应该与正则表达式分开检查这一点。

关于Javascript - 如何检查正则表达式以确保字符串至少包含一个字母/数字序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54205936/

相关文章:

Javascript:为什么使用匿名函数和返回语句

ios - 使用正则表达式在 ios 中标记字符串

javascript - 使用 : localStorage(), window.localStorage() 或 document.localStorage() 哪个更好?

regex - PowerShell Regex替换产生空输出

regex - 删除文本文件中的所有超链接,linux脚本

regex - 如何使用正则表达式在 .* 之后直接用 $ 结束字符串?

regex - Linux sed - 删除不以特定字符开头的单词

javascript - 如何检查选择了哪个单选按钮并在 jQuery 中使用 if else 语句应用适当的行为

javascript - 从数组数组中获取唯一值

javascript - 基于 jquery 和 css 的 html 标记中的安全问题