我需要帮助形成一个正则表达式,允许阿尔法,数字和只有特殊字符逗号-但逗号不应该出现在开始或结束或没有中间空白逗号…现在我正在使用下面的正则表达式,它适用于aplha-数字逗号,但它将允许逗号在开始或结束或空白逗号。
/^[a-zA-Z0-9,] * $/ --
因此,需要regex中的帮助来满足上述中间没有前置/后继/空白逗号的要求…
正确案例:abc, abc12,asdf,qwer23错误案例:,abc,abc12,asdf,qwer23错误案例:abc,abc12,asdf,qwer23,错误案例:abc,abc12,,asdf,qwer23
在修复这个问题的最后2小时被击中,任何帮助都非常感谢…
我建议将逗号从char类中分离出来,并使用*
量化组将整个表达式包装为一个可选的非捕获组,围绕一个强制性子模式(至少需要1个char)(因为您的正则表达式也允许空字符串):
^(?:[a-zA-Z0-9]+(?:,[a-zA-Z0-9]+)*)?$
查看正则表达式演示
详情:
^
-字符串的开头(?:[a-zA-Z0-9] (?:,[a-zA-Z0-9] )*)?
-(=整个字符串可能为空)的可选序列:
[a-zA-Z0-9]
-1个或多个字母数字(?:,[a-zA-Z0-9])*
-零个或多个(由于*
)序列:
,
-逗号[a-zA-Z0-9]
-1个或多个字母数字JS演示:
var test = [
"abc,abc12,asdf,qwer23", // correct
",abc,abc12,asdf,qwer23", // incorrect
"abc,abc12,asdf,qwer23,", // incorrect
"abc,abc12,,asdf,qwer23" ]; // incorrect
var rx = /^(?:[a-zA-Z0-9]+(?:,[a-zA-Z0-9]+)*)?$/;
for (var s of test) {
console.log(s + " => " + rx.test(s));
}