我正在尝试根据这些参数验证给定的输入 有一种情况我无法弄清楚如何验证
没有逗号我不能有两个破折号// 123-455-908无效 而且我无法在Reg中添加该条件
我有这个正则表达式
/^([0-9]+[-,]{0,1})*$/
这是我的代码
let regexp, x, y
regexp = /^([0-9]+[-,]{0,1})*$/
x = "123,,"
regexp.test(x)
这些是允许的:
123-234,456
123-345
123,456
12
1
不允许这些:
123--234
123-345-456
123 ,,
123,455
-123-34
,123
除数字,破折号或逗号外,不得使用其他任何东西
这些是一些示例,希望您能理解
任何对此的帮助将不胜感激
答案 0 :(得分:2)
您可以通过从^
开始到$
边界REGEX结束这种方式
^\d{1,}(?:-|,)?(?:\d+,?\d+)?$
const regex = /^\d{1,}(?:-|,)?(?:\d+,?\d+)?$/gmi;
const str = `123--234
123-345-456
123,,
123,,455
-123-34
,123
123-234,456
123-345
123,456
12
1`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match: ${match}`);
});
}
答案 1 :(得分:0)
这个怎么样?
^(\d{1,3}-)?\d{1,3}(,(\d{1,3}-)?\d{1,3})*$
(\d{1,3}-)?\d{1,3}
验证一个代码实例,而(,(\d{1,3}-)?\d{1,3})*
处理重复代码。
答案 2 :(得分:0)
也许只是我一个人,但是我觉得在尝试针对多个需求验证字符串时,将正则表达式分解成较小的部分会更容易。
这样做的一个 pro 是每个正则表达式都变得超级简化了
但这会带来一个 con ,即您的代码中包含更多正则表达式。
let tests = [
'123-234,456',
'123-345',
'123,456',
'12',
'1',
'123--234',
'123-345-456',
'123,,',
'123,,455',
'-123-34',
',123',
'abc-123',
'a,b,c',
'abc']
function evaluate(str) {
// Remove anything that isn't a number, ',' or '-'
// they will be the same length nothing was removed
if(str.replace(/[^0-9,-]/g, '') != str) return false
// Make sure there is no more than one '-'
if((str.match(/-/g) || []).length > 1) return false
// Make sure there is no more than one ','
if((str.match(/,/g) || []).length > 1) return false
// Make sure the string doesn't start with a ','
if(str.match(/^,/) != null) return false
// All tests have passed return true as it is a valid string
return true
}
tests.forEach(i => console.log("Valid:", evaluate(i), i))