字符串的正则表达式语法

时间:2010-12-17 14:56:15

标签: javascript regex syntax

我有一个正在尝试用来验证字符串的正则表达式。 试图抓住任何不是的东西:大写字母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

2 个答案:

答案 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的正则表达式(删除了分组字符)