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

时间:2013-12-17 22:59:53

标签: javascript regex safari osx-mavericks

我有两种类型为输入字段的表单似乎没有Safari应用的任何验证(在Mac OS X Mavericks上)。也就是说,如果有一种类型的字母和点击提交,则在每个浏览器中都会显示一条消息,您需要在字段中输入数字 - 除了Safari。哦,Firefox也在这个平台上。

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

if ( !/^([0-9])$/.test(value) ) {
    alert ("Please enter a number");
    return;
}

在Firefox中,这表现得像我希望的那样。如果输入任何字母或除一个数字以外的任何字母,则会显示警告。

在Safari上,如果输入两个或更多数字,则也会显示警报,但如果输入非数字字符,则不会。它表现得好像很乐意接受输入,但如果我再在上面的else块中添加一个警告框来向我显示什么值,那么也不会显示。 JavaScript控制台中没有错误。这就像它什么都不做。

我盯着一堆正则表达式,虽然它尽可能简单。我很沮丧。任何想法,任何人?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您的正则表达式测试 true 表示 单个数字 false 的字符串(并输入您的否定值)如果条件)否则。它必须只是一位数或一位或多位数?

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

/^([0-9]+)$/

您是否还需要或正在使用分组(数字周围的括号)?

/^[0-9]+$/

fiddle

答案 2 :(得分:0)

其他验证整数的方法..

// 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)){/* ... */}

用户友好的解决方案..

几个月前,我不得不格式化一个必须是整数或浮点数的用户输入;按键触发格式化过程。

这就是我取得的Fiddle here

允许的格式

  • 0.80
  • 0.80
  • 15.80
  • 1500

希望它会有所帮助..