正则表达式正负十进制数,逗号分隔

时间:2015-12-16 18:54:08

标签: javascript jquery regex forms validation

我无法正确使用正则表达式进行验证。需要多个小数,正数,负数和逗号分隔才允许和其他没有。

应该允许:

41.975481,-87.728222,41.974141,-87.721569,41.973247,-87.7135

不应该允许:

41.975481,-87.728222,41.97TEST4141,-87.721569,41.973247,-87.7135,test

这是我正在使用但它允许角色。

(\-?\d+(\.\d+))(,\s*(\-?\d+(\.\d+)))*

我错过了什么吗?

$('textarea[name="latlong"]').bind('focusout',function(){
        $(".polygon .geoerror").text("");
        var polygon = $(this).val();
        //remove trailing comma and extra space if its there
        polygon = polygon.replace(/,\s*$/, "");
        var checkpoly = /(\-?\d+(\.\d+))(,\s*(\-?\d+(\.\d+)))*/;
        var evenodd = polygon.split(',').length;

        if (checkpoly.test(polygon) && evenodd % 2 == 0) {
            $(".polygon .geoerror").text("Polygon string is valid." + polygon);
            $(".polygon .geoerror").css("color", "green");
        } else if (checkpoly.test(polygon) && evenodd % 2) {
            $(".polygon .geoerror").text("Mismatch of lat and long values." + polygon);
            $(".polygon .geoerror").css("color", "red");
        } else {
            $(".polygon .geoerror").text("Not valid." + polygon);
            $(".polygon .geoerror").css("color", "red");
        }
        return false;
    });

根据用户输入的代码 - 41.975481,-87.728222,41.974141,-87.721569,41.973247,-87.7135,test - 然后测试为有效。它需要错误。

3 个答案:

答案 0 :(得分:0)

这应该这样做:

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

https://regex101.com/r/nP9lE8/1

答案 1 :(得分:0)

ID     V1     V2    V3    V4    V5   V6    V7    V8    V9    V10    V11     V12
ABC    1      2     3     4     1    2     3     NULL  4      1     AB      BC
DEF    2      3     NULL  4     2    3     4     1     2      3     AB      BC
GHI    NULL   NULL  NULL  NULL  NULL NULL  NULL  NULL  NULL  NULL   AB      BC
JKL    3      4     1     2     3    4     1     2     3      4     AB      BC
MNO    1      2     3     4     1    NULL  2     3     4      1     AB      BC

答案 2 :(得分:0)

正则表达式的核心绝对没问题。您遗失的点数在the answercaeth中给出,但没有解释。

基本上,他在开头添加^,在结尾添加$,强制正则表达式匹配整个字,而不仅仅是其中的一部分。根据{{​​3}}(参考 - >主播)^

上的说明
  如果启用了多行标志(m),

[m]会触发字符串的开头或行的开头。这匹配一个位置,而不是一个角色。

熟悉$(同源)

  如果启用了多行标记(m),

[m]会触发字符串的结尾或行的结尾。这匹配一个位置,而不是一个角色。

因此,正则表达式的更正(和更清洁)版本将类似于

/^(-?\d+\.\d+)(\s*,\s*-?\d+\.\d+)+$/
相关问题