我正在寻找一个符合以下规则的正则表达式(在javascript中使用),
/^(-?[0-9]*\.?)*$/g
就是我所拥有的,但它与1.1-1
之类的东西相匹配,这被认为是非法的。
e.g。那些被认为是合法的 1,1.1,1.-3,1。-3.-4.5
e.g。被认为是非法的 1.1-1
答案 0 :(得分:1)
目前还不清楚你是否想要匹配不正确的字符串“1.1-1”的子部分,但如果你是,那么这应该能让你得到你想要的东西。
基本上,我复制了第一个匹配子组,并使后续子组可选?
(-?\d+)((\.(-?\d+))+)?
如果您想匹配任何格式错误的行的第一部分,请参阅以下内容:
^-?\d+(\.(-?\d+))*
答案 1 :(得分:0)
/^-?\d+(\.-?\d+)*$/
:
^ : start
-? : '-' (optional)
\d+ : digits (at least one)
(\.-?\d+)* : you can make it a non-capturing group if you want (?:\.-?\d+)*
\. : '.'
-? : '-' (optional)
\d+ : digits (at least one)
* : match this group one or more times
$ : end
在开始时查找有效号码(^-?\d+
),然后查找 a .
后跟有效号码,匹配为尽可能多((\.-?\d+)*
)。
示例:强>
var tests = "1,-1,-1.-33,1.-4.-5.7,.1,1.,-1-1,1.5-7-8,1..1".split(','),
regex = /^-?\d+(\.-?\d+)*$/;
tests.forEach(function(t) {
console.log(t, " ===> ", regex.test(t));
});