需要Regex只允许4个数字和一个字母

Need Regex allowing only 4 digits and one alphabet

本文关键字:一个 Regex 数字 4个 需要      更新时间:2023-09-26

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

允许数字:0 ~ 9999

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

  • 允许:1a a2, 1111a, 1a22, 9999

  • 不允许:99999, 11111, a, aa

我试着:

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

适用于1a, a2, 1111a, 1a22, 9999。但它也错误地允许99999。关于如何限制数字长度有什么帮助吗?

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

试试这个。看到演示。

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

正如您所发现的,regex不擅长记录事物。在这种情况下,提前查看将使您正确:

^'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}

这是演示

使用{size}来限制正则表达式中字符串的长度。

我更新正则表达式:

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