hash = window.location.hash.substr(1);
var reg = new RegExp('^[0-9]$');
console.log(reg.test(hash));
“123”和“123f”都是假的。我想检查哈希是否只包含数字。我错过什么了吗?
hash = window.location.hash.substr(1);
var reg = new RegExp('^[0-9]$');
console.log(reg.test(hash));
“123”和“123f”都是假的。我想检查哈希是否只包含数字。我错过什么了吗?
当前回答
^[0-9]$
...是一个匹配任何单个数字的正则表达式,因此1将返回true,而123将返回false。
如果你加上量词*,
^[0-9]*$
表达式将匹配任意长度的数字字符串,123将返回true。(123f仍然返回false)。
请注意,从技术上讲,一个空字符串是一个长度为0的数字字符串,因此它将使用^[0-9]*$返回true。如果您只想接受包含1个或多个数字的字符串,请使用+而不是*
^[0-9]+$
正如其他人所指出的那样,有很多方法可以实现这一点,但我认为应该指出,原始问题中的代码只需要一个额外的字符就可以正常工作。
其他回答
如果数字不是特别大,可以用:
new RegExp(
'^' + // No leading content.
'[-+]?' + // Optional sign.
'(?:[0-9]{0,30}\\.)?' + // Optionally 0-30 decimal digits of mantissa.
'[0-9]{1,30}' + // 1-30 decimal digits of integer or fraction.
'(?:[Ee][-+]?[1-2]?[0-9])?' + // Optional exponent 0-29 for scientific notation.
'$' // No trailing content.
)
这试图避免一些场景,以防万一:
溢出原始字符串可能传递到的任何缓冲区。 由1E-323等非正常数字引起的缓慢或异常。 当期望有一个有限的数字时通过无穷大(尝试1E309或-1E309)。
这个函数也允许有符号和浮点数或空字符串:
var reg = /^-?\d*\.?\d*$/
如果你不想让空字符串使用这个:
var reg = /^-?\d+\.?\d*$/
^[0-9]$
...是一个匹配任何单个数字的正则表达式,因此1将返回true,而123将返回false。
如果你加上量词*,
^[0-9]*$
表达式将匹配任意长度的数字字符串,123将返回true。(123f仍然返回false)。
请注意,从技术上讲,一个空字符串是一个长度为0的数字字符串,因此它将使用^[0-9]*$返回true。如果您只想接受包含1个或多个数字的字符串,请使用+而不是*
^[0-9]+$
正如其他人所指出的那样,有很多方法可以实现这一点,但我认为应该指出,原始问题中的代码只需要一个额外的字符就可以正常工作。
也许它有用:
let a = "1234"
parseInt(a) == a // true
let b = "1234abc"
parseInt(b) == b // false
你需要*,所以它表示“零或多个前一个字符”,这应该做到:
var reg = new RegExp('^\\d*$');