请我验证来自用户的输入,输入的格式为:3个大写字符,3个整数,可选空格, - ,可选空格,'LAB或(EN或ENLH)1个整数,范围从[1-9]。
我写的正则表达式是
/\D{3}\d{3}\s?-\s?(LAB|(EN(LH)?\d{1}))/
我发现难以在LAB 之后停止输入,以便当 EEE333 - LAB1 被输入时,它将变为无效。
答案 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
[A-Z]{3}
\d{3}
?- ?
(?:EN(?:LH)?[1-9]))
\b