当前位置: 代码迷 >> JavaScript >> Need Regex只允许4位数字和1个字母
  详细解决方案

Need Regex只允许4位数字和1个字母

热度:65   发布时间:2023-06-07 17:54:09.0

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

允许的数字: 09999

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

  • 允许: 1aa21111a1a229999

  • 不允许: 9999911111aaa

我试过了:

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

这适用于情况: 1aa21111a1a229999 但是它也错误地允许99999 对如何限制数字长度有帮助吗?

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

试试看。看演示。

正如您所发现的,正则表达式并不擅长记录事物。 在这种情况下,先行检查将使您正确:

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

我们首先使用^\\d{1,4}$来获得最简单的情况。 如果失败,则第二种选择,第二种选择接管。 它要做的第一件事是使用(?=\\d*[az]\\d*$)断言字符串中确实有一个字母。 如果前瞻成功,则匹配位置返回到字符串的开头,这使我们可以再次匹配整个字符串,这次是[az\\d]{1,5}$

此时,实际上并不需要验证其余字符是否为数字。 我本可以使用(?=[^az]*[az][az]*$ 。我们只需要确保它可以查看整个字符串即可。我只是认为\\d*更具自记录性。

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

这是

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

我更新了正则表达式:

^(?:(?=.*[a-z])(?:[0-9]|[a-z]){1,5}|[0-9]{4})$
  相关解决方案