我需要用Javascript正则表达式验证HTML表单中输入的字符串。
可以有无限量的“单词”(字母和数字的任意组合-[a-zA-Z0-9],没有符号,下划线,破折号,连字符),用单个空格(“”,在最后一个“单词”之后不是强制的,或者在第一个“单词”之后,如果只有一个“单词”)分隔。 每个“单词”的最小长度为3个符号,最大长度为10个符号。
例如,可以是有效的字符串-“Bob BoB4U BOB4EVER 112233”。
存在以下任何一个“单词”都应该使字符串无效:bo,b@b,bobobobobobobobob-4-u,b_o_b。
已找到字符串长度的正则表达式:^(?=[\s\s]{3,10}$)[\s\s]*,尝试使用它。
我还尝试将前面的代码与^([a-zA-Z0-9]{3,10}\s?)*$之类的代码结合起来,但遗憾的是,没有成功。
更新。 上面给出的字符串和单词只是一个例子。 我不需要过滤掉那些特定的单词,它只是为了有效和无效项的可视化表示。
请允许我指出,允许组成单词及其长度的字符已经排除了'bo','b@b','bob-4-u'和'b_o_b'。 因此,我认为对剩下的'BOBOBOBOBOBOBOBOB'进行一个交替的正面展望和一个负面展望就足够了:
^(?=.*\b(?:bob|BoB4U|BOB4EVER|112233)\b)(?!.*\bbobobobobobobob\b)[a-zA-Z0-9]{3,10}(?: [a-zA-Z0-9]{3,10})*$
查看在线演示
^
-开始字符串Ancor.(?=.*\b(?:Bobb4Ubob4Ever112233)\b)
-除换行(.*
),单词边界(\b
)以及“Bobb4Ubob4Ever112233'与另一个单词边界之间的交替之外的任何字符的正面前视。(?!.*\BBOBOBOBOBBOB\B)
-否定前向检查除换行(.*
),单词边界(\B
)和带有另一个单词边界的'BOBOBOBOBOBOB'以外的任何字符。[a-zA-Z0-9]{3,10}
-任意大小写字母或数字,最多三个或10个。(?:
-打开非捕获组。
[a-zA-Z0-9]{3,10}
-文字空格,后跟任意大小写字母或数字,最多三个或十个。)*
-关闭非捕获组并将其匹配零次或多次。“更新。上面给出的字符串和单词只是一个例子。我不需要过滤掉那些特定的单词,它只是用于有效和无效项的可视化表示。”
在这种情况下,您也可以在负面前瞻中使用交替,例如:^(?=.*\b(?:Word1Word2Word3)\b)(?!.*\b(?:Word4Word5Word6)\b)[a-zA-Z0-9]{3,10}(?:[a-zA-Z0-9]{3,10})*$