正则表达式正负十进制数,逗号分隔
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,则根据代码进行测试 - 则测试为有效。它需要错误。
$('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+)+$/
相关文章:
- 如何生成十进制数
- 将一个十进制数转换成八分之一的分数
- JavaScript basis 是 math.pow 函数中的十进制数
- 用于验证十进制数的正则表达式
- 如何使用 javascript 将浮点数格式化为十进制数(7)
- 如何在javascript中输入十进制数
- 使用jquery验证器插件为十进制数设置正则表达式
- 用于在字符串中查找十进制数的正则表达式
- 如何验证十进制数
- 在 sort() 之后,十进制数的 JavaScript 数组顺序不正确
- 为什么项目符号图显示十进制数,而我们的范围为1
- 输入字段不保存十进制数并将其设置为 ,00
- 使用带有 .NET MVC 的 Javascript 将十进制数格式化为两位
- j查询添加十进制数
- 如何将十进制数添加到时间并将其作为时间格式恢复
- 将逗号分隔字符串数组转换为不同的数组
- AngularJS双向绑定输入到十进制数
- 请求动画帧不适用于小于 1 的十进制数
- 如何使用 id 输入类型=“文本”JavaScript 中的值设置自动 2 个十进制数
- 正则表达式正负十进制数,逗号分隔