任何数字或大写字母(其中的5个),然后是字符'?'??'
例如,如果我有:
AA54ZG-应匹配
AA54ZG? - 应该匹配
AA54Z? - 应该匹配
AA54ZG-不应该匹配
?A54ZG-不应该匹配
AA54Z-不应该匹配
等等...(如果您觉得有必要,我可以提供更多示例)
您去这里。只需将" mytest"变量设置为您想验证的任何内容,或者如果不信任正则态度:
const MY_REGEX = /^([A-Z0-9]{5}?)|([A-Z0-9]{6}??)$/
function test( str ) {
if( MY_REGEX.test( str ) )
document.write( str +": MATCHES<br>" );
else
document.write( str +": DOESN'T MATCH<br>" );
}
test( "AA54ZG" ); // MATCHES
test( "AA54ZG?" ); // MATCHES
test( "AA54Z?" ); // MATCHES
test( "aA54ZG" ); // DOESN'T MATCH
test( "?A54ZG" ); // DOESN'T MATCH
test( "AA54Z" ); // DOESN'T MATCH
说明:
[A-Z0-9] {5}:5(或6)上案字母或数字。
??: 选修的 "?"(必须使用?,因为?保留为"可选")
?:必需的"?"
这是我想到的,它适用于您给出的示例:
(?:^[A-Z0-9]{6}??$)|(?:^[A-Z0-9]{5}?$)
在这里查看:https://regex101.com/r/hp0jh9/2
另一种做同样的方式(但会以更少的步骤匹配)。
[dA-Z]{5}(?:?|[dA-Z]??)
-
[dA-Z]{5}
:5x大写或数字 -
(?:?|[dA-Z]??)
:随后是问号,或其他上/数字和可选的问号。?:
只是使其成为一个非捕捉组。
根据您的用例,将^
和$
分别添加到开始和结束以验证整个字符串。
https://regex101.com/r/jpv3w7/1