hash = window.location.hash.substr(1);
var reg = new RegExp('^[0-9]$');
console.log(reg.test(hash));

“123”和“123f”都是假的。我想检查哈希是否只包含数字。我错过什么了吗?


当前回答

为什么不用这样的东西:

$.isNumeric($(input).val())

jquery测试,和最常见的情况下检查

其他回答

var validation = {
    isEmailAddress:function(str) {
        var pattern =/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
        return pattern.test(str);  // returns a boolean
    },
    isNotEmpty:function (str) {
        var pattern =/\S+/;
        return pattern.test(str);  // returns a boolean
    },
    isNumber:function(str) {
        var pattern = /^\d+\.?\d*$/;
        return pattern.test(str);  // returns a boolean
    },
    isSame:function(str1,str2){
        return str1 === str2;
    }
};   

alert(validation.isNotEmpty("dff"));
alert(validation.isNumber(44));
alert(validation.isEmailAddress("mf@tl.ff"));
alert(validation.isSame("sf","sf"));

这个函数也允许有符号和浮点数或空字符串:

var reg = /^-?\d*\.?\d*$/

如果你不想让空字符串使用这个:

var reg = /^-?\d+\.?\d*$/

只有数字的正则表达式(已更新)

 var reg = new RegExp('[^0-9]','g');

你需要*,所以它表示“零或多个前一个字符”,这应该做到:

var reg = new RegExp('^\\d*$');

您也可以使用以下方法,但要注意它们的内部实现和/或返回值。

1A isNaN(+'13761123123123'); // returns true
1B isNaN(+'13761123123ABC'); // returns false

2A ~~'1.23'; // returns 1
2B ~~'1.2A'; // returns 0

For 1A & 1B the string is first type coerced using the + operator before being passed to the isNaN() function. This works because a number types that include non-numeric values return NaN. There are considerations with the isNaN()'s implementation details which is documented here. One consideration is if a boolean value is passed as isNaN(+false|true) are coerced to their numeric equivalents and thus false is returned but one might expect the function to return true since the boolean value isn't numeric in the sense of what we are testing.

对于2A和2B,值得注意的是,寻找数字的补数要求给定的值在规范中可以引用的32位有符号整数的值范围内。

我个人的偏好是1A和1B,因为它们包含一元运算符,因此可读性较差,因为速度和简洁。

穿孔https://jsperf.com/numeric-string-test-regexvsisnan/1