两个字母和最多13个数字的正则表达式错误地接受其他字母

时间:2018-01-01 20:31:45

标签: ruby regex

我正在尝试为遵循此规则的模型字段构建正则表达式:

  • 以两个字母开头
  • 可以填充数字,最多13位

有效示例:

  • US333
  • FR52389000

无效的例子:

  • 11111
  • T11

我以为我找到了正确的正则表达式:

/[a-zA-Z][a-zA-Z]\d*/

但使用http://rubular.com/对其进行验证似乎验证了RR444kjj

有人可以指出错误吗?

1 个答案:

答案 0 :(得分:6)

您需要使用限制量词\d和正确的锚点。

/\A[[:alpha:]]{2}\d{0,13}\z/

请参阅regex demo

  • \A - 字符串的开头(注意^锚点与Ruby正则表达式中行的开头匹配)
  • [[:alpha:]]{2} - 2个字母(为了确保您只允许使用ASCII字母,请使用[a-zA-Z]{2}
  • \d{0,13} - 0到13位
  • \z - 字符串结尾(请注意$锚点与Ruby正则表达式中的行尾相匹配)。