需要正则表达式只允许4位数字和一个字母表

时间:2015-07-16 09:15:56

标签: javascript regex regex-lookarounds

字符串的最大长度为5(包括一个字母)。如果没有字母,则允许的数字长度为4。

允许的数字:09999

允许使用一个字母(仅当字符串至少有一个数字时)。一些例子:

  • 允许:1aa21111a1a229999

  • 不允许:9999911111aaa

我试过了:

       ^(?:[0-9]|[a-z](?=[^a-z]*$)){1,5}$

适用于案例:1aa21111a1a229999。但它也错误地允许99999。 有关如何限制数字长度的任何帮助吗?

3 个答案:

答案 0 :(得分:1)

$x = 512;

试试这个。看看演示。

https://regex101.com/r/fX3oF6/10

答案 1 :(得分:1)

正如你所发现的那样,正则表达并不擅长保持事物的数量。在这种情况下,前瞻将使你正确:

^\d{1,4}$|^(?=\d*[a-z]\d*$)[a-z\d]{1,5}$

我们首先使用^\d{1,4}$来解决最简单的问题。如果失败,第二种选择,第二种选择接管。它首先要做的是使用(?=\d*[a-z]\d*$)断言字符串中只有一个字母。如果前瞻成功,匹配位置将返回到字符串的开头,允许我们再次匹配整个字符串,这次是[a-z\d]{1,5}$

此时无需验证其余字符是否为数字。我本可以使用(?=[^a-z]*[a-z][a-z]*$代替。我们只需要确保它查看整个字符串。我只是认为它更加自我记录\d*

请注意,此正则表达式将匹配仅包含字母的字符串。如果您想确保至少有一位数,请将最终{1,5}更改为{2,5}

这是 demo

答案 2 :(得分:0)

使用{size}限制正则表达式中String的长度。

我更新正则表达式:

^(?:(?=.*[a-z])(?:[0-9]|[a-z]){1,5}|[0-9]{4})$