我有一个正在尝试用来验证字符串的正则表达式。 试图抓住任何不是的东西:大写字母alpha,数字, - ,/,不包含空格,且长度必须至少4个字符,且不得超过78个。
我已经验证了正则表达式,并且知道它有效,只是无法弄清楚出了什么问题。
到目前为止,这就是我所拥有的:
var turkey = new RegExp('^(\S[A-Z0-9-/]{4,78})$');
if (turkey.test(serialNumber)) {
alert('pass');
}
else {
alert('fail');
}
通过:
AS4345-ADFSF / ASDF-445
d / -F4
/ ER45-DFGH334 / 45-4FS
故障:
aDF345#SD / FR
45-fg / 422 fgs
2SD
G-5
答案 0 :(得分:2)
我认为你应该失去\S
。
您现在拥有的正则表达式与new RegExp('^(S[A-Z0-9-/]{4,78})$')
相同,并匹配“S-AWFL / 12”之类的字符串。
如果要添加另一个反斜杠(new RegExp('^(\\S[A-Z0-9-/]{4,78})$')
,则正则表达式与/^(\S[A-Z0-9-\/]{4,78})$')/
相同。然后,您将匹配任何以一个不是空格的字符开头的内容,然后匹配4-78个字符所以“!23ASF - //”会匹配,但不会匹配“23ASF - //”。
答案 1 :(得分:0)
通过消除任何必须属于A-Z
,/
的内容的过程。或连字符(-
)自动不是空白字符,因此无需检查。
话虽如此,你的模式看起来是正确的,但你应该将连字符作为类中的最后一个字符或者将其转义,否则正则表达式希望将其视为范围分隔符。
类似于:^[0-9A-Z\/-]{4,78}$
应满足您的需求。
编辑:修复了用于.NET的RegEx的正则表达式(删除了分组字符)