RegEx匹配列表

时间:2015-05-20 08:18:32

标签: javascript regex

我使用javascript RegEx验证用户输入,该用户输入获取包含3 - 4 - 53 / 4 / 53 , 4 , 5等数字列表的字符串。

到目前为止我的正则表达式是

function(string){
    var reg = /([0-9])([^\s]|[\s])([\-\,\/])/g;
    if(string.match(reg){
        return true;
    }
    return false;
}

到目前为止,我可以获得3 - 4 -但不能获得5,如果我省略空格,则它与任何内容都不匹配。

我想要一个正则表达式,可以将所有 n 数字除以这些字符(\ - ,),而不是匹配字母或其他特殊字符。

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

您需要通过$

检查输入字符串的结尾
^(?:(\d)\s[-,\/]\s)+\d$

<强> Live demo

<强>说明

^                   # Start of the line
    (?:             # Start a non-capturing group
        (\d)        # Capture any digits
        \s[-,\/]\s  # Followed by a space, [-,/] chars and another space
    )+              # One or more of the previous expression
    \d              # Any digit
$                   # End of line

Javascript部分:

function test(string) {
    var reg = /^(?:(\d)\s[-,\/]\s)+\d$/gm;
    if(string.match(reg)) 
        return true; 
    return false;
}

样品:

test('3 , 4 , 5') --> True
test('3 , 4 , 5 ,') --> False
test('3 - 4 - 5 ') --> False
test('3 - 4 - 5') --> True

注意:我根据您当前的输入和正则表达式修改了正则表达式。因此,如果您要检查序列中的多个数字,则需要将\d替换为正则表达式中的每个位置\d++表示一次或多次。所以它会是:

^(?:(\d+)\s[-,\/]\s)+\d+$

和样品:

test('39 - 46 - 5') --> True
test('69 / 85 / 23 /') --> False

答案 1 :(得分:1)

使用

function check(string){
    return /^\s*\d+(\s*[\/,-]\s*\d+)*\s*$/.test(string);
}

注释

  • 我删除了g标志,这是无用的,我使用test而不是match,因为你想要的是测试字符串,而不是提取一场比赛。

  • 我添加了^$以确保您检查整个字符串

  • \s*允许可选空格

  • 允许数字为多位数(在您的问题中不明确),我将\d更改为\d+

答案 2 :(得分:0)

/([0-9])([\s])([-,/])([\s])([0-9])([\s])([-,/])([\s])([0-9])([-,/])?/g

虽然,这是一个更简单的版本。它是由您的代码制作的。

/\d\s[-,/]\s\d\s[-,/]\s\d[-,/]?/g

  1. \d匹配数字
  2. ?表示前面的语句是可选的。
  3. 我取消了你的额外括号
  4. 这应该更容易理解。使用我链接的网站以便将来使用RegExp。它是救星。

    在行动here

    中查看

答案 3 :(得分:-2)

您可以修剪空格并应用以下正则表达式。

function(string){
    var reg = /([0-9]+)[-|,|\/]?/g;
    if(reg.match(string)){
        return true;
    }
    return false;
}

([0-9] +)将匹配由-,/分割的一个或多个数字。