hash = window.location.hash.substr(1);
var reg = new RegExp('^[0-9]$');
console.log(reg.test(hash));
我在"123"
和"123f"
都得到了false。我想检查哈希值是否只包含数字。我有什么遗漏吗?hash = window.location.hash.substr(1);
var reg = new RegExp('^[0-9]$');
console.log(reg.test(hash));
我在"123"
和"123f"
都得到了false。我想检查哈希值是否只包含数字。我有什么遗漏吗?var reg = /^\d+$/;
应该这样做。原始匹配项适用于仅由一个数字组成的内容。
\d
被解释成字母'd'。请在JavaScript控制台中运行'/^\d+$/' === '/^d+$/'
。在字符串中嵌入正则表达式时,需要进行双重转义:eval('/^\\d+$/')
。 - Mike Samuel008
是一个错误标记,因为它看起来像一个八进制字面量,但在标准数学表示法中,基数₁₀是隐含的。我不知道提问者想要什么,如果我要拒绝格式错误的八进制,我应该匹配有效的十六进制,并决定是否包括Python3/Java数字,如123_456
或C++ 123'456
。在没有更多上下文(如特定的编程或人类语言)的情况下,\d+
似乎是一个折衷方案,并且作者的第一次尝试强烈建议使用它。 - Mike Samuel正如您所说,您希望哈希表只包含数字。
const reg = new RegExp('^[0-9]+$');
或者const reg = new RegExp('^\d+$')
\d
和 [0-9]
意义相同。
使用 + 表示搜索一个或多个出现的 [0-9]。
这个可以允许有正负数和小数点,也可以是空字符串:
var reg = /^-?\d*\.?\d*$/
如果您不想允许空字符串,请使用此代码:
var reg = /^-?\d+\.?\d*$/
+
替换为*
:^-?\d*\.?\d*$
。+
表示至少在前面找一个数字,*
表示找零个或多个数字。 - Setthasevar reg = /^-?\d*[\.]?\d+$/
。 - Matt McClellanvar 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"));
^[0-9]$
...是一个正则表达式,匹配任何单个数字,因此1将返回true,但123将返回false。
如果您添加*量词,
^[0-9]*$
表达式将匹配任意长度的数字字符串,123将返回true。(123f仍将返回false)。
请注意,从技术上讲,空字符串是一个长度为0的数字字符串,因此使用^[0-9]*$ 它将返回true。如果您只想接受包含1个或多个数字的字符串,请使用+而不是*。
^[0-9]+$
正如其他许多人指出的那样,有很多种方法可以实现这一点,但我觉得值得指出的是,原始问题中的代码只需要一个额外的字符就可以按预期工作。
const numberReSnippet = "NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)";
const matchOnlyNumberRe = new RegExp("^("+ numberReSnippet + ")$");
describe("Number Regex", function() {
const re = matchOnlyNumberRe;
it("Matches Java and JavaScript numbers", function() {
expect(re.test( "1")).toBe(true);
expect(re.test( "0.2")).toBe(true);
expect(re.test( "0.4E4")).toBe(true); // Java-style
expect(re.test( "-55")).toBe(true);
expect(re.test( "-0.6")).toBe(true);
expect(re.test( "-0.77E77")).toBe(true);
expect(re.test( "88E8")).toBe(true);
expect(re.test( "NaN")).toBe(true);
expect(re.test( "Infinity")).toBe(true);
expect(re.test( "-Infinity")).toBe(true);
expect(re.test( "1e+24")).toBe(true); // JavaScript-style
});
it("Matches fractions with a leading decimal point", function() {
expect(re.test( ".3")).toBe(true);
expect(re.test( "-.3")).toBe(true);
expect(re.test( ".3e-4")).toBe(true);
});
it("Doesn't match non-numbers", function() {
expect(re.test( ".")).toBe(false);
expect(re.test( "9.")).toBe(false);
expect(re.test( "")).toBe(false);
expect(re.test( "E")).toBe(false);
expect(re.test( "e24")).toBe(false);
expect(re.test( "1e+24.5")).toBe(false);
expect(re.test("-.Infinity")).toBe(false);
expect(re.test( "8|24")).toBe(false);
});
});
[E|e][+|-]?
是不正确的。看起来你在想 (?:E|e)(?:\+|-)?
,并且在将其转换为字符集时忘记了删除 |
。当您使用分组指定替代方案时,需要 |
,但在字符集中,所列出的选择项自动成为彼此的替代方案,而 |
没有特殊含义。因此,类似 [E|e]
的内容允许 E
、e
和字符 |
。 - Louis/NaN|-?((\d*\.\d+|\d+)([Ee][+-]?\d+)?|Infinity)/
。
我更改了浮点数和整数的顺序,以使表达式更加贪婪。 - Simon Zyx\d将无法匹配小数点。使用以下内容来匹配小数。
const re = /^\d*(\.\d+)?$/
'123'.match(re) // true
'123.3'.match(re) // true
'123!3'.match(re) // false
这个函数检查它的输入是否符合经典意义上的数字,就像人们期望正常数字检测函数应该工作一样。
例如,它可以用于HTML表单输入的测试。
它绕过了所有JS的传说,比如tipeof(NaN) = number,parseint('1 Kg') = 1,布尔值被强制转换为数字等。
它通过将参数呈现为字符串,并将该字符串与类似于@codename-的正则表达式进行比较,但允许像5.和.5这样的条目。
function isANumber( n ) {
var numStr = /^-?(\d+\.?\d*)$|(\d*\.?\d+)$/;
return numStr.test( n.toString() );
}
not numeric:
Logger.log( 'isANumber( "aaa" ): ' + isANumber( 'aaa' ) );
Logger.log( 'isANumber( "" ): ' + isANumber( '' ) );
Logger.log( 'isANumber( "lkjh" ): ' + isANumber( 'lkjh' ) );
Logger.log( 'isANumber( 0/0 ): ' + isANumber( 0 / 0 ) );
Logger.log( 'isANumber( 1/0 ): ' + isANumber( 1 / 0 ) );
Logger.log( 'isANumber( "1Kg" ): ' + isANumber( '1Kg' ) );
Logger.log( 'isANumber( "1 Kg" ): ' + isANumber( '1 Kg' ) );
Logger.log( 'isANumber( false ): ' + isANumber( false ) );
Logger.log( 'isANumber( true ): ' + isANumber( true ) );
numeric:
Logger.log( 'isANumber( "0" ): ' + isANumber( '0' ) );
Logger.log( 'isANumber( "12.5" ): ' + isANumber( '12.5' ) );
Logger.log( 'isANumber( ".5" ): ' + isANumber( '.5' ) );
Logger.log( 'isANumber( "5." ): ' + isANumber( '5.' ) );
Logger.log( 'isANumber( "-5" ): ' + isANumber( '-5' ) );
Logger.log( 'isANumber( "-5." ): ' + isANumber( '-5.' ) );
Logger.log( 'isANumber( "-.5" ): ' + isANumber( '-5.' ) );
Logger.log( 'isANumber( "1234567890" ): ' + isANumber( '1234567890' ));
正则表达式的解释:
/^-?(\d+\.?\d*)$|(\d*\.?\d+)$/
\d+\.?\d*
$.isNumeric($(input).val())
jQuery被测试过,最常见的情况是被检查
$.isNumeric
将不起作用。 - Louis如果您只需要正整数并且不需要前导零(例如“0001234”或“00”):
var reg = /^(?:[1-9]\d*|\d)$/;