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

时间:2019-01-15 19:52:06

标签: javascript regex

我正在尝试找出正确的正则表达式来检测看起来像2d1h30m10s的模式,其中任何模式都是有效的,例如1h1h30m或{{1 }}或30m或它们的任意组合。 regex是正确的工具吗?

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

false

我在这里想念什么?

4 个答案:

答案 0 :(得分:1)

您需要将regexp的每个部分设为可选,因此您可以省略该单元。

您需要从其他选择之一中选择[h],但您要匹配12h,但不能匹配01h

结尾不应该有\d

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

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

DEMO

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

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

答案 1 :(得分:0)

也许这会起作用

\d+\w+

如果我正确理解您要测试的字符串中包含数字后面的字符

答案 2 :(得分:0)

尝试:

^(\d{0,2}[hms]){0,3}$

示例: https://regex101.com/r/NV6oEu/1

答案 3 :(得分:0)

我认为您要查找的表达式是:

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

您的原始表达式有两个主要问题:1.末尾的\d和2.捕获作用域(请注意表达式中的多余部分)。

这还将捕获:1h13s