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

Max*_*nce 1 ruby regex

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

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

有效示例:

  • US333
  • FR52389000

示例无效:

  • 11111
  • T11

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

/[a-zA-Z][a-zA-Z]\d*/
Run Code Online (Sandbox Code Playgroud)

但是使用http://rubular.com/进行的测试证明似乎有效RR444kjj

有人可以指出错误吗?

Wik*_*żew 6

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

/\A[[:alpha:]]{2}\d{0,13}\z/
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示.

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