我需要正则表达式验证混合长度,总长度为6个字符,其中4-6个字符为大写/数字和0-2个空格。
我尝试过
^[A-Z0-9]{4,6}+[\s]{0,2}$
但是它的最大长度为8个字符,但我最多需要6个字符。
答案 0 :(得分:3)
如果字母数字字符只能出现在字符串的开头,而空格可以出现在结尾(即字母数字和空格的顺序很重要),则可以使用
/^(?=.{6}$)[A-Z0-9]{4,6}\s*$/
请参见regex demo
详细信息
^
-字符串的开头(?=.{6}$)
-字符串长度被限制为恰好6个非线性换行符[A-Z0-9]{4,6}
-4、5或6个大写ASCII字母或数字\s*
-0 +空格(但实际上,只能添加0、1或2,因为总长度已通过先行验证)$
-字符串的结尾。如果要在字符串内的任何地方匹配字母数字和空格,则需要一个基于lookaround的正则表达式,例如
^(?=(?:[^A-Z0-9]*[A-Z0-9]){4,6}[^A-Z0-9]*$)(?=(?:\S*\s){0,2}\S*$)[A-Z0-9\s]{6}$
请参见regex demo
详细信息
^
-字符串的开头(?=(?:[^A-Z0-9]*[A-Z0-9]){4,6}[^A-Z0-9]*$)
-正向超前,需要在字符串中的任意位置出现4到6个字母或数字(?=(?:\S*\s){0,2}\S*$)
-正向超前,需要在字符串中的任意位置存在0到2个空格[A-Z0-9\s]{6}
-6个ASCII大写字母,数字或空格$
-字符串的结尾。为缩短模式,第二前行可以写为(?!(?:\S*\s){3})
,如果字符串内任何地方有3个空格字符,则匹配将失败。参见the regex demo。
答案 1 :(得分:1)
您可以使用|
个字符将几种情况合而为一。
const regex = /(^[A-Z0-9]{4}\s{2}$)|(^[A-Z0-9]{5}\s$)|(^[A-Z0-9]{6}$)/g;
alert(regex.test(prompt('Enter input, including space(s)')));
答案 2 :(得分:1)
如果要在末尾匹配零个,一个或两个空格,则可以在这三种情况下使用alternation。
{% block content %}{% endblock %}
说明
^(?:[A-Z0-9]{4}[ ]{2}|[A-Z0-9]{5}[ ]|[A-Z0-9]{6})$
断言字符串的开头^
非捕获组
(?:
匹配大写或数字4次,后跟2个空格[A-Z0-9]{4}[ ]{2}
或|
匹配大写或数字5次,后跟1个空格[A-Z0-9]{5}
或|
匹配大写字母或数字6次[A-Z0-9]{6}
关闭非捕获组)
声明字符串的结尾答案 3 :(得分:1)
/^(?=.{6}$)[A-Z0-9]{4,6}\s*$/
请尝试使用此正则表达式。最多输入6个字符。 4或5或6个字符。并用空格补全6位数字。