JavaScript中的简单正则表达式适用于除Safari之外的所有浏览器

JavaScript中的简单正则表达式适用于除Safari之外的所有浏览器,javascript,regex,safari,osx-mavericks,Javascript,Regex,Safari,Osx Mavericks,我有两个表单,其输入字段的类型为number,但Safari(在Mac OS X Mavericks上)似乎没有应用任何验证。也就是说,如果一个人键入字母并点击提交,在每个浏览器中都会出现一条小消息,提示您需要在字段中输入数字,Safari除外。哦,这个平台上的Firefox也是如此 因此,我决定需要在处理这些表单值的JavaScript代码中添加验证。我输入了一个正则表达式来拒绝任何不是一位数字的内容: if ( !/^([0-9])$/.test(value) ) { alert (

我有两个表单,其输入字段的类型为number,但Safari(在Mac OS X Mavericks上)似乎没有应用任何验证。也就是说,如果一个人键入字母并点击提交,在每个浏览器中都会出现一条小消息,提示您需要在字段中输入数字,Safari除外。哦,这个平台上的Firefox也是如此

因此,我决定需要在处理这些表单值的JavaScript代码中添加验证。我输入了一个正则表达式来拒绝任何不是一位数字的内容:

if ( !/^([0-9])$/.test(value) ) {
    alert ("Please enter a number");
    return;
}
在Firefox中,它的行为与我所希望的一样。如果您输入任何字母或除单个数字以外的任何内容,将显示警报

在Safari上,如果输入两个或更多数字,也会显示警报,但如果输入非数字字符,则不会显示警报。它的行为就像它愉快地接受输入一样,但是如果我在上面下面的else块中进一步添加一个警报框来显示值是什么,那么也不会显示。JavaScript控制台中没有错误。好像什么都没做


我已经盯着正则表达式看了很多遍,尽管它尽可能简单。我很困惑。有什么想法吗

我真的不喜欢正则表达式。它们总是容易出错,有时你不考虑所有可能的匹配。你为什么不使用这样的东西:

if (parseInt("15", 10) !== NaN)
    alert("is numeric");
else
    alert("please enter a number"); 

您的正则表达式测试true是否为单个数字的字符串false(并输入否定if条件)否则。它必须只有一个数字还是一个或多个数字

添加+以指定一个或多个数值

/^([0-9]+)$/
您是否需要或正在使用分组(数字周围的括号)


验证整数的其他方法。

// Integers including 0: following values will return true (0, 1, 2 .., 65, etc.)
/^(?:0|[1-9]\d*)$/.test(value);

// Integers, zero not allowed
/^[1-9]\d*$/.test(value);

// Test whether the value is an integer or not (+ sign try to cast the value into a number)
if(Number.isInteger(+value)){/* ... */}
用户友好型解决方案..

// Integers including 0: following values will return true (0, 1, 2 .., 65, etc.)
/^(?:0|[1-9]\d*)$/.test(value);

// Integers, zero not allowed
/^[1-9]\d*$/.test(value);

// Test whether the value is an integer or not (+ sign try to cast the value into a number)
if(Number.isInteger(+value)){/* ... */}
几个月前,我必须将用户输入格式化为整数或浮点数;格式化过程在按键时触发

这就是我所取得的成就

允许的格式

  • .80
  • 0.80
  • 15.80
  • 一千五百

希望能有所帮助。

您是否尝试过使用
\d
而不是
[0-9]
?虽然我不知道您的产品有什么问题,但是
/^\d$/
似乎会简单得多。您的正则表达式中不需要paren。trued\d的行为与此相同。实际上,它基本上可以是1-3位,因此如果我在范围后添加{1,3}。。。naaah,在Firefox和Safari中仍然可以很好地处理数字,但不能处理字母等。@AlChuck附带的提琴可以在chrome和Safari上处理我的Mac OSX 10.8.5。