用于数字格式验证的正则表达式

Regex for Number format Validation

帮助正则表达式匹配这个数字模式。我只需要在下面接受输入 formats.For 实现这个验证逻辑我需要正则表达式。 我尝试使用以下

/(^(([0-9]{5,6}[,])+[0-9]{5,6})$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5}\*)$)|(^(([0-9]{5,6}[,])+[0-9]{1,5}\*)$)|(^(([0-9]{1,5}\*[,])+[0-9]{1,5})$)/

但并不是所有场景都匹配。

以下是可能的输入

  1. 1123*,2133*,123*,1*
  2. 213433,123453,123*
  3. 123333,123623,678123,12323,
  4. 1123*,123445,166788,123333,.......

条件 - 数字的长度可以是 5 或 6。输入必须用逗号分隔。如果输入有 *(通配符搜索),则最大长度不能大于 5。ex 123123(不允许)*

这个好像不是很复杂,如果我看懂了问题。

var x = ['1123*,2133*,123*,1*', '213433,123453,123*', '123333,123623,678123,12323', '1123*,123445,166788,123333'];

var re =  /\d{5,6}|\d{1,5}\*/g;

console.log(x.map(s => s.match(re)));

我不确定我是否完全理解 RegExp 匹配模式的要求,但这是一个初步的方法。

  • 据我了解,[待匹配] 号码的长度可以为 5 或 6,并且匹配模式应该能够捕获符合此描述的任意数量的号码.对于这一部分,我将假设数字序列中不包含星号字符 (*)。

假设我们有一个变量 input,它被赋值为字符串 213433,123453,123*。那么...

input.match(/\d{5,6}(?!\*)/g);

应该按照描述捕获 input 变量的一部分。我注意到您在尝试中使用了字符集([0-9] 部分); \d 术语完成相同的 thing.The (?!\*) 部分用于检查 5 位或 6 位数字序列后面是否没有星号字符。注意:您必须转义星号。

  • 如果输入确实包含星号字符,则匹配部分不能超过 5 个字符。 (我希望我能正确理解提示)!为此,以下 RegExp 模式适用于我 运行 的(不可否认的)两个测试。注意:此模式保留(、matches/captures)星号字符以及数字序列。

我们可以假设此处的 input 变量被分配给字符串 1123*,2133*,123*,1* 以测试下一个 RegExp 匹配模式。

input.match(/(\d+\*){1,5}/g);

如果我没记错的话,可以使用简单的 OR (|) 运算符有条件地组合这两个匹配模式。

input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);

希望对您有所帮助。作为最终测试,让我们将 input 变量分配给字符串 1123*,2133*,123*,1*,123333,123623,678123,12323(我连接了您为此提供的示例输入 1. 和 3.)。然后,运行 returns 数组正上方的语句:

["1123*", "2133*", "123*", "1*", "123333", "123623", "678123", "12323"]

如果您想检索没有任何通配符的匹配项 (*),您可以简单地修改表达式如下:

a.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g).map(val => val.replace('*', ''));

获得...

["1123, "2133", "123", "1", "123333", "123623", "678123", "12323"]