定期错误的正则表达式,不验证

时间:2018-01-14 12:14:20

标签: ruby-on-rails ruby regex

请我验证来自用户的输入,输入的格式为:3个大写字符,3个整数,可选空格, - ,可选空格,'LAB或(EN或ENLH)1个整数,范围从[1-9]。

我写的正则表达式是

/\D{3}\d{3}\s?-\s?(LAB|(EN(LH)?\d{1}))/

我发现难以在LAB 之后停止输入,以便当 EEE333 - LAB1 被输入时,它将变为无效。

3 个答案:

答案 0 :(得分:1)

如果您在最后询问如何阻止LAB1,请在正则表达式测试中使用行结束$/\D{3}\d{3}\s?-\s?(LAB|(EN(LH)?\d{1}))$/

如果您尝试在可接受的字符串末尾只需要一个数字,请在可选组之外移动单个数字匹配: /\D{3}\d{3}\s?-\s?(LAB|(EN(LH)?))\d{1}$/

答案 1 :(得分:1)

我已经为您写了以下正则表达式:

[AZ] {3} [0-9] {3} \ S - \ S(?: LAB |(?:EN | LH))?[1-9] {1}

正则表达式如下:

[A-Z]{3}
     

完全匹配从A到Z的三个大写字符

[0-9]{3}
     

完全匹配从0到9的三个数字

\s?\-\s?
     

匹配空格(可选)或' - '(必填)或空格(可选)

(?:LAB|(?:EN|LH))
     

匹配'LAB'或('EN'或'LH')
?:省略捕获LAB或EN或LH

[1-9]{1}
     

完全匹配1到9之间的一个数字

答案 2 :(得分:1)

您可以将正则表达式放在单词边界\b之间。 你用\D开始你的正则表达式,这是任何不是数字的字符。例如,这也会匹配$%^。您可以使用[A-Z]

您使用的\d{1}[0-9]的标记,但您希望匹配1到9 [1-9]之间的数字。您也可以省略{1}

也许这次更新会对你有用吗?

\b[A-Z]{3}\d{3} ?- ?(?:LAB|(?:EN(?:LH)?[1-9]))\b

<强>解释

  • 字边界\b
  • 匹配3个大写字母[A-Z]{3}
  • 匹配3位\d{3}
  • 匹配可选的空格,连字符和另一个可选空格?- ?
  • 非捕获组,例如匹配LAB或EN EN1或ENLH或ENLH9 (?:EN(?:LH)?[1-9]))
  • 字边界\b