我有几个带有类型为数字的输入字段的表单似乎没有被 Safari 应用任何验证(在 Mac OS X Mavericks 上)。也就是说,如果一个人输入字母并点击提交,则在每个浏览器中都会出现一条小消息,提示您需要在字段中输入数字 - Safari 除外。哦,火狐也在这个平台上。
因此,我决定需要向处理这些表单值的 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]+)$/
另外,您是否需要或正在使用分组(数字周围的括号)?
/^[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)){/* ... */}
用户友好的解决方案..
几个月前,我不得不格式化一个必须是整数或浮点数的用户输入;格式化过程在按键时触发。
这就是我在这里实现的小提琴
允许的格式
- .80
- 0.80
- 15:80
- 1500 年
希望它会有所帮助..