当前位置: 首页 > 知识库问答 >
问题:

正则表达式-验证逗号分隔的数字列表,长度为1到3位

祁建明
2023-03-14

我试图验证一个逗号分隔的数字列表,其中数字可以是1到3位,可以以0开头,但不能是0(0、00或000)。我正在使用以下内容,但当我测试“44222555”时,我发现无效:

^([1-9]|[0-9][1-9]|[0-9][0-9][1-9](?:,(?:[1-9]|[0-9][1-9]|[0-9][0-9][1-9]))*)$

我认为90在这里也是无效的,但应该是有效的

共有2个答案

杨宏儒
2023-03-14

在以下情况下

注意:根据字符串的大小,不使用全局标志将提高速度。

  • 每套允许一到三个数字
  • 允许一对多组
  • 不允许0,00,000个零基组合
  • 允许01、010、001、100个零基组合
  • 如果有多组数字,则两组之间用一个逗号分隔
  • 不允许以逗号结尾
let regex = new RegExp('^((?!0+\\b)[0-9]{1,3}\,?\\b)+$');

// NOTE: If using literal notation /regex/.test() then "\" is not escaped.
// i.e. '^((?!0+\\b)[0-9]{1,3}\,?\\b)+$' becomes /^((?!0+\b)[0-9]{1,3}\,?\b)+$/
// /^((?!0+\b)[0-9]{1,3}\,?\b)+$/.test(string);

console.log('Passes question test: 44,222,555 ', regex.test('44,222,555'));
console.log('Passes question test: 90 ', regex.test('90'));
console.log('Can contain multiple sets of one to three numbers: ', regex.test('1,22,333'));
console.log('Cannot have more than three numbers in a set 1234', !regex.test('1234'));
console.log('Can have one number in a set ', regex.test('1'));

console.log('Cannot have 0 alone as a set: ', !regex.test('0'));
console.log('Cannot have 00 alone as a set: ', !regex.test('00'));
console.log('Cannot have 000 alone as a set: ', !regex.test('000'));

console.log('Cannot end in a comma ', !regex.test('123,'));

console.log('Cannot contain multiple commas next to each other ', !regex.test('123,,694'));
console.log('Allowed zero combinations are 00#, #00, 0#0, 00#, ##0, 0## ', regex.test('001,100,010,001,110,011'));
console.log('Cannot be just a comma ', !regex.test(','));
console.log('Cannot be a blank string ', !regex.test(''));
易扬
2023-03-14

您可以使用负前瞻来简化您的正则表达式:

/^(?!0+\b)[0-9]{1,3}(?:,(?!0+\b)[0-9]{1,3})*$/gm

RegEx演示

(?!0\b)是负前瞻,如果在当前位置前面的单词边界之前有一个或多个零,则匹配将失败。

 类似资料:
  • 我正在尝试使用正则表达式验证ruby类中文本字段中逗号分隔的单词字符串。以下应该是有效的: 以下内容应无效: 我以为这能行 在Rubular上,它似乎是有效的,但当我在我的类中进行如下验证时,它会接受应该是无效字符串的内容。 我不确定我的问题是在于正则表达式还是验证方法本身。感谢任何帮助。

  • 我需要一个. Net(C#)正则表达式来匹配逗号分隔的数字列表,如果有逗号作为最后一个字符,这些数字将不匹配 我已经找到了这个Regex但是当结尾有逗号时匹配 什么是符合这种模式的正则表达式模式? 编辑:为清晰起见添加了1个示例,正确答案适用于

  • 是有效输入。 无效 有效 无效 无效(只有7个数字) 我尝试了,但它接受重复的数字

  • 我在Javascript中有以下正则表达式: 这将检查字符串是否至少有两个大于1个字符的单词。 前- 我现在有了一个新的要求,我试图实现它,但不能正确执行。 新要求:能够有一个逗号分隔的相同类型的输入列表。不能以逗号结尾。根据上述规则,每个项目必须有效 如果没有逗号,则其也是有效的 所有字符都是字母,没有数字/特殊字符

  • 我想将一个长数组值转换为一个特定格式的字符串。 例如,将longArray={0,1,2,3}转换为字符串0.1.2.3 我可以执行arrays.ToString(longArray),它将返回[0,1,2,3]。 现在必须将字符串[0,1,2,3]转换为0.1.2.3