Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于数字格式验证的正则表达式_Javascript_Regex_Regex Lookarounds - Fatal编程技术网

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

Javascript 用于数字格式验证的正则表达式,javascript,regex,regex-lookarounds,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})$)/ 但它并不是所有的场景都匹配 以下是可能的输入 1123*,2133*,123*,1* 213

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

/(^(([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})$)/
但它并不是所有的场景都匹配

以下是可能的输入

  • 1123*,2133*,123*,1*
  • 213433123453123*
  • 12333312362367812312323
  • 1123*,12344516788123333

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

    如果我理解问题的话,这看起来并不复杂

    var x=['1123*、2133*、123*、1*、'213433123453123*、'12333312362367812323'、'1123*、12344516788123333';
    var re=/\d{5,6}|\d{1,5}\*/g;
    
    log(x.map(s=>s.match(re))如果我理解这个问题,这看起来并不复杂

    var x=['1123*、2133*、123*、1*、'213433123453123*、'12333312362367812323'、'1123*、12344516788123333';
    var re=/\d{5,6}|\d{1,5}\*/g;
    
    log(x.map(s=>s.match(re))我不确定我是否完全理解RegExp匹配模式的要求,但这里有一个初步的方法

    • 据我所知,数字[待匹配]的长度可以是5或6,并且匹配模式应该能够捕获符合此描述的任意数量的数字。对于这一部分,我将假定数字序列中不包含星号字符(*
    假设我们有一个变量
    input
    ,它被指定为字符串
    213433123453123*
    的值。然后

    input.match(/\d{5,6}(?!\*)/g);
    
    应捕获所述的
    输入
    变量的部分。我注意到您在尝试中使用了字符集(即
    [0-9]
    部分);
    \d
    术语完成了相同的任务。
    (?!\*)
    部分用于检查5位或6位序列后面是否有星号字符。注意:您必须避开星号

    • 如果输入具有星号字符,则匹配部分不能超过5个字符。(我希望我正确理解了提示)!对于这一点,下面的RegExp模式适用于我运行的两个测试(诚然是用之不竭的)。注意:此模式保留(即匹配/捕获)星号字符和数字序列
    为了测试下一个RegExp匹配模式,我们可以假设这里的
    input
    变量被分配给字符串
    1123*、2133*、123*、1*

    input.match(/(\d+\*){1,5}/g);
    
    如果我没有弄错的话,可以使用简单的OR(
    |
    )运算符有条件地组合这两种匹配模式

    input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);
    
    希望这能有所帮助。作为最后一个测试,让我们将
    input
    变量分配给字符串
    1123*、2133*、123*、1*、12333312362367812312323
    (我连接了您为此提供的示例输入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"]
    

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

    • 据我所知,数字[待匹配]的长度可以是5或6,并且匹配模式应该能够捕获符合此描述的任意数量的数字。对于这一部分,我将假定数字序列中不包含星号字符(*
    假设我们有一个变量
    input
    ,它被指定为字符串
    213433123453123*
    的值。然后

    input.match(/\d{5,6}(?!\*)/g);
    
    应捕获所述的
    输入
    变量的部分。我注意到您在尝试中使用了字符集(即
    [0-9]
    部分);
    \d
    术语完成了相同的任务。
    (?!\*)
    部分用于检查5位或6位序列后面是否有星号字符。注意:您必须避开星号

    • 如果输入具有星号字符,则匹配部分不能超过5个字符。(我希望我正确理解了提示)!对于这一点,下面的RegExp模式适用于我运行的两个测试(诚然是用之不竭的)。注意:此模式保留(即匹配/捕获)星号字符和数字序列
    为了测试下一个RegExp匹配模式,我们可以假设这里的
    input
    变量被分配给字符串
    1123*、2133*、123*、1*

    input.match(/(\d+\*){1,5}/g);
    
    如果我没有弄错的话,可以使用简单的OR(
    |
    )运算符有条件地组合这两种匹配模式

    input.match(/\d{5,6}(?!\*)|(\d+\*){1,5}/g);
    
    希望这能有所帮助。作为最后一个测试,让我们将
    input
    变量分配给字符串
    1123*、2133*、123*、1*、12333312362367812312323
    (我连接了您为此提供的示例输入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"]
    

    你能解释一下模式吗?这不是你一小时前问的同一个问题吗?减去要求-我添加了它们。请提供一个简单、清晰的描述,说明您希望匹配的输入,包括是否接受逗号以及如何接受逗号。我们不知道你所说的“可以扩展到任何次数”是什么意思。当你刚刚说“数字可以有长度5或6”时,为什么你会说“它不匹配所有场景”,并给出一个例子
    1*
    ?@torazaburo我已经更新了问题。你能解释一下模式吗?这不是吗