diff --git a/lib/OpenLayers/BaseTypes.js b/lib/OpenLayers/BaseTypes.js index b9e2cbc054..ae48f1517c 100644 --- a/lib/OpenLayers/BaseTypes.js +++ b/lib/OpenLayers/BaseTypes.js @@ -134,6 +134,31 @@ OpenLayers.String = { } } return tokens.join(""); + }, + + /** + * Property: OpenLayers.String.numberRegEx + * Used to test strings as numbers. + */ + numberRegEx: /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/, + + /** + * APIFunction: OpenLayers.String.isNumeric + * Determine whether a string contains only a numeric value. + * + * Examples: + * (code) + * OpenLayers.String.isNumeric("6.02e23") // true + * OpenLayers.String.isNumeric("12 dozen") // false + * OpenLayers.String.isNumeric("4") // true + * OpenLayers.String.isNumeric(" 4 ") // false + * (end) + * + * Returns: + * {Boolean} String contains only a number. + */ + isNumeric: function(value) { + return OpenLayers.String.numberRegEx.test(value); } }; diff --git a/tests/BaseTypes.html b/tests/BaseTypes.html index 46d7ba5882..5d6e8e2c92 100644 --- a/tests/BaseTypes.html +++ b/tests/BaseTypes.html @@ -141,6 +141,43 @@ ); } + + function test_String_isNumeric(t) { + var cases = [ + {value: "3", expect: true}, + {value: "+3", expect: true}, + {value: "-3", expect: true}, + {value: "3.0", expect: true}, + {value: "+3.0", expect: true}, + {value: "-3.0", expect: true}, + {value: "6.02e23", expect: true}, + {value: "+1.0e-100", expect: true}, + {value: "-1.0e+100", expect: true}, + {value: "1E100", expect: true}, + {value: null, expect: false}, + {value: true, expect: false}, + {value: false, expect: false}, + {value: undefined, expect: false}, + {value: "", expect: false}, + {value: "3 ", expect: false}, + {value: " 3", expect: false}, + {value: "1e", expect: false}, + {value: "1+e", expect: false}, + {value: "1-e", expect: false} + ]; + t.plan(cases.length); + + var func = OpenLayers.String.isNumeric; + var obj, val, got, exp; + for(var i=0; i