var regexp = /^[+-]?(?:\d{1,3}(?:\,\d{3})*)*\.?\d*(?:[eE][+-]?\d+(?:\,\d{3})*|[\u00bc\u00bd\u00be])?[%\u00b0]?$/ var strings = [ '-0.5e-55', //0 should be true '-.5e-55', //1 should be true '.5e-55', //2 should be true '5e-55', //3 should be true '5,000e-55', //4 should be true '5,000e-5,500', //5 should be true '5,000e-5,50', //6 should be false 'e-55', //7 should be false '-0.5e55', //8 should be true '-0.5e-5.5', //9 should be false '-0.5e55¼', //10 should be false '-0.5e55%', //11 should be true '-5¼', //12 should be true '-5.5¼' //13 should be detected as true despite being wrong ] function ts_parseFloat(num) { if (!num) return 0; var div = /%$/.test(num) ? 100 : 1; num = parseFloat(num.replace(/\u00bc/g, '.25').replace(/\u00bd/g, '.5').replace(/\u00be/g, '.75').replace(/\u00b0/g, '').replace(/%/g, '').replace(/,/g, '')); return (isNaN(num) ? 0 : (num/div)); } function testnum(string) { // if (regexp.test(string) && !/^[eE]/.test(string)) // WScript.echo(i + '\t' + ts_parseFloat(string)); // else // WScript.echo(i + '\t' + false); WScript.echo(i + '\t' + (regexp.test(string) && !/^[eE]/.test(string))); } for (var i = 0; i < strings.length; i++) { testnum(strings[i]) } //testnum('56,000') //WScript.echo(parseFloat('e2'));