2013-04-09 152 views
-1

我与regex一个新手,我需要-180和180之间的整数用于数的正则表达式或浮动,每次最多6个小数正则表达式浮动正极和负极和6小数

+0

我想知道为什么你需要一个正则表达式。你不能只是'x <180 && x> -180'吗? – 2013-04-09 14:48:41

+0

@JanDvorak OP可能试图在更大的字符串中搜索这样的数字,而不仅仅是验证。 – iamnotmaynard 2013-04-09 14:51:45

回答

1

注意正则表达式无法验证是否数字实际上是在你给出的范围之间 - 这应该由你的业务逻辑来处理。

^-?\d{0,3}(\.\d{0,6})?$ 

这可能是一个更好的解决方案在数字阅读,在JavaScript分析它,并验证这样的说法:

http://jsfiddle.net/4dqqh/

function isValid(numStr) { 
    var float = parseFloat(numStr); 
    return Math.abs(float) <= 180 && float.toFixed(6) - float == 0 
} 

console.log(isValid('-123.23323')); // true 
console.log(isValid('-183.23323')); // false 
console.log(isValid('-183.233233424')); // false 
+2

那么,你可以创建一个只允许所需范围内的值的正则表达式,但业务逻辑对它来说是一个更好的地方。 – iamnotmaynard 2013-04-09 14:49:30

+0

正确,请参阅我的更新:) – 2013-04-09 14:52:29

+0

'float.toFixed(6) - float == 0' - 是否应该接受'1.000000000'? – 2013-04-09 14:53:26

0

您可以检查该值可以转换到你需要的范围和精度的数字,但是正则表达式不是那个工具。

function numbercheck180(s){ 
    var n= !isNaN(n= s*1e6)? Math.round(n)/1e6:-181; 
    return (n<180 && n>-180 && n+''=== s) 
} 


numbercheck180('-179.123456') true 
numbercheck180('179.123456') true 
numbercheck180('179.1234561') false 
numbercheck180('-179.1234561') false 
numbercheck180('-181') false 
numbercheck180('180.00001') false