javascript 正则表达式,用于匹配1个大写字母字符,第二个字符可以是字母/数字,其余数字

dgenwo3n  于 2022-12-10  发布在  Java
关注(0)|答案(3)|浏览(137)

我写了一个正则表达式测试一个特定类型的字符串,它工作得很好,但我的一些部分说,我不确定是否有例外,使它无效。
我需要验证字符串类型如下。
“国械2480”、“国械03667”、“国械2999”
我写的正则表达式是"^[A-Z]{0,1}[A-Z0-9]{0,1}[0-9]{0,4}$"
这里是JSBin,如果有人想做实验的话。
https://jsbin.com/yikuqonepu/edit?html,js,console
编辑:为了进一步帮助其他人,我主要是想确定6字符串的第一个字母是字母表,第二个可以是数字/字母表,最后4个是数字,谢谢!

2wnc66cl

2wnc66cl1#

你可以在线测试你的正则表达式。下面的链接是其中一个例子。

你的正则表达式接受字符串'','0','H 0',因为你接受{0}个字符和数字。我将把正则表达式改为:

"^[A-Z]{1}[A-Z0-9]{1}[0-9]{4}$"
vu8f3i0k

vu8f3i0k2#

其他的答案都很简单。这里有一个教育性的答案,你可以对所需的字符数和预期的汽车模式使用积极的前瞻。当预期的字符模式很复杂(比你的例子更复杂)时,这种方法很有用。

[
  'GX2480', 'H03667', 'HQ2999', // ok
  'HQ2', 'HQ299999', '123456', '123', 'AAA123' // not ok
].forEach(str => {
  let ok = /^(?=.{6}$)[A-Z][A-Z]?[0-9]*$/.test(str);
  console.log(str + ' => ' + ok);
});

输出量:

GX2480 => true
H03667 => true
HQ2999 => true
HQ2 => false
HQ299999 => false
123456 => false
123 => false
AAA123 => false

正则表达式说明:

  • ^-字符串起点处的锚
  • (?=.{6}$)-6个字符的正前瞻
  • [A-Z][A-Z]?-预期有1或2辆大写汽车,与[A-Z]{1,2}相同
  • [0-9]*--可选数字
  • $--字符串末端的锚
jaql4c8m

jaql4c8m3#

"^[A-Z]{0,1}[A-Z0-9]{0,1}[0-9]{0,4}$"也将匹配仅数字的输入或空输入,因为一切都是可选的。
如果要强制输入以字母开头,请不要将其设置为可选:"^[A-Z][A-Z0-9]?[0-9]{0,4}$"
有效输入:

  • “A级”
  • “AB”
  • “A1”
  • “AB1”
  • “AB1234”
  • “A12345”

无效的输入:

  • ““
  • “ABC”
  • “AB12345”
  • “AB12C”
  • “1”
  • “一二三”

如果真实的的问题是如何匹配长度为6的输入字符串,第一个字符总是字母,最后4个字符总是数字,第二个字符是字母或数字,那么正则表达式将是:

^[A-Z][A-Z0-9][0-9]{4}$

有效输入:

  • “AB1234”
  • “A12345”

无效的输入:

  • “A级”
  • “AB”
  • “A1”
  • “AB1”
  • ““
  • “ABC”
  • “AB12345”
  • “AB12C”
  • “AB123C”
  • “ABC123”
  • “1”
  • “一二三”

或者,它可以用如下公式表示,也许这是您允许的两种不同输入形式中更明确的一种:

^([A-Z]{2}[0-9]{4}|[A-Z][0-9]{5})$

相关问题