正则表达式检查字符串是否只包含数字

IT技术 javascript regex
2021-02-03 21:23:05
hash = window.location.hash.substr(1);
var reg = new RegExp('^[0-9]$');
console.log(reg.test(hash));

我在"123"上都出错了"123f"我想检查散列是否只包含数字。我错过了什么?

6个回答
var reg = /^\d+$/;

应该这样做。原始匹配任何由一位数字组成的内容。

它不考虑负数。
2021-03-25 21:23:05
@D_N。很公平。对于您的原始观点,yes008在许多 PL 中是一个错误标记,因为它以八进制文字开头,但在标准数学符号中,隐含了基础 ₁₀。我不知道提问者想要哪个,如果我要拒绝格式错误的八进制,我应该匹配有效的十六进制并决定是否包含 Python3/Java 数字,如123_456C++ 123'456\d+在没有更多上下文(如特定编程或人类语言)的情况下,这似乎是一个中间立场,作者的第一次尝试强烈建议这样做。
2021-03-31 21:23:05
/^[\+\-]?\d*\.?\d+(?:[Ee][\+\-]?\d+)?$/
2021-04-02 21:23:05
@vsync,因为\d在单引号字符串中是字母“d”。尝试'/^\d+$/' === '/^d+$/'在您的 JavaScript 控制台中运行在字符串中嵌入 RegExp 时需要双重转义:eval('/^\\d+$/')
2021-04-07 21:23:05
@朱塞佩佩斯。真的。它也不处理实数、复数、四元数等。与数数有关的问题以及我的回答也是如此。
2021-04-09 21:23:05

正如您所说,您希望哈希仅包含数字。

const reg = new RegExp('^[0-9]+$');

或者

const reg = new RegExp('^\d+$')

\d并且[0-9]两者都是同一个意思。使用的 + 表示搜索 [0-9] 中的一个或多个出现。

这并不完全正确,[0-9] 和 \d 不一样,\d 还匹配来自其他字符集的数字字符,例如希伯来语和中文。
2021-03-19 21:23:05

这也将允许签名和浮点数或空字符串:

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

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

var reg = /^-?\d+\.?\d*$/
如果您不想允许为空但希望允许使用 .25 之类的语法 var reg = /^-?\d*[\.]?\d+$/
2021-03-20 21:23:05
你的第二个正则表达式真的很有帮助。它只是在验证像 .378 这样的数字时卡住了你能告诉我如何调整 /^-?\d+\.?\d*$/ 以便它也验证 .378
2021-03-22 21:23:05
更改+*^-?\d*\.?\d*$+意味着你在前面*寻找至少一个数字,寻找零个或多个数字。
2021-03-24 21:23:05
如果你想测试一个字符串是否是一个可解析的数字,包括负数和小数: /^-?\d+\.?\d*$|^\d*\.?\d+$/
2021-04-02 21:23:05
为了更好地浮动,请使用 /^-?\d+(\.\d+)?$/
2021-04-07 21:23:05
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+$/;
        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"));
非常有用的实用程序
2021-04-03 21:23:05
^[0-9]$ 

...是匹配任何单个数字的正则表达式,因此 1 将返回 true 但 123 将返回 false。

如果添加 * 量词,

^[0-9]*$

该表达式将匹配任意长度的数字字符串,123 将返回 true。(123f 仍然会返回 false)。

请注意,从技术上讲,空字符串是一个长度为 0 的数字字符串,因此它将使用 ^[0-9]*$ 返回 true 如果您只想接受包含 1 个或多个数字的字符串,请使用 + 而不是 *

^[0-9]+$

正如许多其他人指出的那样,有很多方法可以实现这一点,但我觉得指出原始问题中的代码只需要一个额外的字符即可按预期工作是合适的。