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

时间:2016-11-10 20:54:34

标签: javascript regex regex-lookarounds

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

/(^(([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. 条件 - 数字的长度为5或6.输入必须用逗号分隔。如果输入有 *(通配符搜索),则最大长度不能大于5. ex 123123 (不允许)*

2 个答案:

答案 0 :(得分:1)

如果我理解这个问题,这似乎并不复杂。

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)));

答案 1 :(得分:1)

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

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

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

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

应该如上所述捕获input变量的部分内容。我注意到你在尝试使用字符集(即。[0-9]部分); \d术语完成相同的操作。(?!\*)部分用于检查5位或6位序列后面是否带有星号字符。注意:您必须转义星号。

  • 如果输入确实具有星号字符,则匹配的部分不能超过5个字符。 (我希望我能正确理解提示)!为此,以下RegExp模式适用于我所运行的两项测试(当然是无穷无尽的)。注意:此模式保留(,匹配/捕获)星号字符以及数字序列。

我们可以假设此处的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.)。然后,直接在上面运行语句将返回数组:

["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"]