簡體   English   中英

正則表達式正負十進制數,逗號分隔

[英]regex positive negative decimal numbers, comma separated

我在使正則表達式正確進行驗證時遇到麻煩。 需要多個小數點,正數,負數和逗號分隔以允許使用,否則不進行其他操作。

應該允許:

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,則測試-然后測試為有效。 它需要出錯。

應該這樣做:

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

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

$('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;
});

正則表達式的核心絕對可以。 您遺漏的要點已在caeth 的答案給出 ,但未作解釋。

基本上,他在開頭加上^ ,在結尾加上$ ,迫使正則表達式匹配整個單詞,而不僅僅是部分單詞。 根據RegExr的描述(參考->錨) ^

[m]匹配字符串的開頭,如果啟用了多行標志(m),則匹配行的開頭。 這匹配一個位置,而不是一個字符。

類似$ (來源相同)

[m]匹配字符串的末尾,如果啟用了多行標志(m),則匹配行的末尾。 這匹配一個位置,而不是一個字符。

因此,經過修正(更清晰一點)的正則表達式版本將類似於

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM