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

regex positive negative decimal numbers, comma separated

本文关键字:分隔 十进制数 正则表达式      更新时间:2023-09-26

我在正确验证正则表达式时遇到问题。需要多个小数、正数、负数和逗号分隔才能被允许,仅此而已。

应允许:

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

不应允许:

41.975481,-87.728222, 41.97TEST4141,-87.721569, 41.973247,-87.7135, 测试

这就是我正在使用的,但它允许字符。

('-?'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,则根据代码进行测试 - 则测试为有效。它需要错误。

$('textarea[name="latlong"]').bind('focusout',function(){
    $(".polygon .geoerror").text("");
    var polygon = $(this).val();

    //remove extra space if its there
    polygon = polygon.replace(/'s*/g, "");
    var nums = polygon.split(',');
    var len = nums.length;
    var is_even = ( len % 2 == 0 );
    if (!is_even) {
        $(".polygon .geoerror").text("Mismatch of lat and long values." + polygon);
        $(".polygon .geoerror").css("color", "red");
        return false;
    }
    var validNums = true;
    for(var i = 0; i < len; i++) {
        if(isNaN(nums[i])) {
            validNums = false;
            break;
        }
    }
    if (validNums) {
        $(".polygon .geoerror").text("Polygon string is valid." + polygon);
        $(".polygon .geoerror").css("color", "green");
    } else {
        $(".polygon .geoerror").text("Not valid." + polygon);
        $(".polygon .geoerror").css("color", "red");
    }
    return false;
});

这应该可以做到:

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

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

正则表达式的核心绝对没问题。你遗漏的要点在凯斯的回答中给出了,但没有解释。

基本上,他在开头添加了^,在结尾添加了$,迫使正则表达式匹配整个单词,而不仅仅是其中的一部分。根据RegExr(参考->锚点(上的描述^

[m]表示字符串的开头,如果启用了多行标志 (m(,则为行的开头。这匹配的是位置,而不是字符。

类似$(同一来源(

[m]表示字符串的末尾,如果启用了多行标志 (m(,则表示行的结尾。这匹配的是位置,而不是字符。

因此,更正(并且更干净(的正则表达式版本类似于

/^(-?'d+'.'d+)('s*,'s*-?'d+'.'d+)+$/