我需要准备正则表达式,它必须验证用逗号分隔的列表 要求是
JS: https://jsfiddle.net/bababalcksheep/yyw29bj8/4/
//check if list is separated by commas
//There must be no trailing comma/commas
// ,, is not allowed ; there must be word inbetween commas
// there must be atleast one comma
var test = function(STR) {
return /[-\w\s]+(,[-\w\s]+)*/g.test(STR);
}
//must Pass
console.log('===== PASS ============');
console.log(test('1000,two thousand,3000'));
console.log(test('1000 , 2000 , 3000'));
console.log(test('First Option,2Nd Option, THIRD Option'));
//must fail
console.log('===== FAIL ============');
console.log(test('Single Value'));
console.log(test('1000 ,, 2000 , 3000'));
console.log(test('1000 , 2000 , 3000,'));
console.log(test(',,1000 , 2000 , 3000'));
console.log(test('1000 , 2000 , 3000,,'));
答案 0 :(得分:2)
您应该删除/g
,因为您使用RegExp.test()
,添加主播^
和$
(禁止部分匹配)并将*
替换为+
/^[-\w\s]+(,[-\w\s]+)+$/.test(STR);
^ ^^
量词(要求至少一个逗号):
\s
请参阅updated fiddle和regex demo(我用常规空格替换---,----
以进行演示)。
如果您想避免验证^\s*\w+(?:\s+\w+)*(?:\s*,\s*\w+(?:\s+\w+)*)+\s*$
等序列,可以进一步增强正则表达式:
^\s*
这个正则表达式匹配任何带有前导/尾随可选空格的字符串(由于\s*$
和\w+(?:\s+\w+)*
),它以一个单词开头,后跟零个或多个空格+单词(SELECT auth_group.id, auth_group.name,
(SELECT COUNT(auth_user_groups.id) FROM auth_user_groups WHERE
auth_user_groups.group_id = auth_group.id AND
auth_user_groups.user_id IN (SELECT auth_user.id FROM auth_user WHERE username LIKE '%x%')) AS user_cnt
FROM auth_group ORDER BY user_cnt DESC;
}并且可以使用可选空格,逗号和一个单词后跟空格+单词(0次或更多次)来执行此操作一次或多次。