Javascript HTML文本输入仅允许数字输入
有没有一种快速方法可以将HTML文本输入设置为只允许数字击键加“.”?注意:这是一个更新的答案。下面的注释指的是一个旧版本,它把钥匙码弄得乱七八糟Javascript HTML文本输入仅允许数字输入,javascript,jquery,html,Javascript,Jquery,Html,有没有一种快速方法可以将HTML文本输入设置为只允许数字击键加“.”?注意:这是一个更新的答案。下面的注释指的是一个旧版本,它把钥匙码弄得乱七八糟 $(".numeric").keypress(function() { return (/\d/.test(String.fromCharCode(event.which) )) }); JavaScript 你自己试试看 $(".numeric").keypress(function() { return (/\d/.test(S
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
JavaScript
你自己试试看
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
您可以使用以下setInputFilter功能过滤文本的输入值:支持复制+粘贴、拖放、键盘快捷键、上下文菜单操作、不可键入的键、插入符号位置、不同的键盘布局,以及:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
您现在可以使用setInputFilter功能安装输入过滤器:
setInputFilter(document.getElementById("myTextBox"), function(value) {
return /^\d*\.?\d*$/.test(value); // Allow digits and '.' only, using a RegExp
});
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
有关更多输入过滤器示例,请参见。还要注意,您仍然必须进行服务器端验证
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
打字稿
这是这个的打字脚本版本
function setInputFilter(textbox: Element, inputFilter: (value: string) => boolean): void {
["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) {
textbox.addEventListener(event, function(this: (HTMLInputElement | HTMLTextAreaElement) & {oldValue: string; oldSelectionStart: number | null, oldSelectionEnd: number | null}) {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (Object.prototype.hasOwnProperty.call(this, 'oldValue')) {
this.value = this.oldValue;
if (this.oldSelectionStart !== null &&
this.oldSelectionEnd !== null) {
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
}
} else {
this.value = "";
}
});
});
}
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
jQuery
还有一个jQuery版本。看
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
HTML 5
HTML 5有一个带有see的本机解决方案,但请注意,浏览器支持各不相同:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
大多数浏览器只会在提交表单时验证输入,而不会在键入时验证输入。
不支持步长、最小值和最大值属性。
Chrome版本71.0.3578.98仍然允许用户在字段中输入字符e和e。另见。
Firefox版本64.0和Edge EdgeHTML版本17.17134仍然允许用户在字段中输入任何文本。
您自己试试。2解决方案:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
例如,将表单验证程序用于
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
在onblur期间,即当用户离开输入字段的字段事件时,使用正则表达式执行检查:
<script type="text/javascript">
function testField(field) {
var regExpr = new RegExp("^\d*\.?\d*$");
if (!regExpr.test(field.value)) {
// Case of error
field.value = "";
}
}
</script>
<input type="text" ... onblur="testField(this);"/>
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
使用这个DOM
<input type='text' onkeypress='validate(event)' />
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
HTML5有,这听起来很适合你。目前,只有Opera在本机支持它,但有一个支持JavaScript实现。还有一个例子,对我来说非常有用:
function validateNumber(event) {
var key = window.event ? event.keyCode : event.which;
if (event.keyCode === 8 || event.keyCode === 46) {
return true;
} else if ( key < 48 || key > 57 ) {
return false;
} else {
return true;
}
};
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
和HTML:
<input type="input" id="edit1" value="0" size="5" maxlength="5" />
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
如果您想向设备建议,您可以使用字母或数字之间的移动电话。我已经搜索了很长时间,想找到一个好的答案,我们迫切需要这是一个改进的功能:
function validateNumber(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
if ((key < 48 || key > 57) && !(key == 8 || key == 9 || key == 13 || key == 37 || key == 39 || key == 46) ){
theEvent.returnValue = false;
if (theEvent.preventDefault) theEvent.preventDefault();
}
}
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
使用jQuery和replace而不是查看event.keyCode或event.which的简短而甜蜜的实现:
$('input.numeric').live('keyup', function(e) {
$(this).val($(this).val().replace(/[^0-9]/g, ''));
});
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
只有一个小的副作用,即键入的字母会立即出现,而CTRL/CMD+A的行为似乎有点奇怪。HTML5支持正则表达式,因此您可以使用:
<input id="numbersOnly" pattern="[0-9.]+" type="text">
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
$(document).ready(function(){
$("body").on("focus","input[type=text].number,.NUMBER",function(e){
$(e.target).data('oldValue',$(e.target).val());
});
$("body").on("keypress","input[type=text].number,.NUMBER",function(e){
e.target.oldvalue = e.target.value;
number(e);
});
$("body").on("change","input[type=text].number,.NUMBER",function(e){
var t = e.target
var min = $(t).attr("min");
var max = $(t).attr("max");
var val = parseInt($(t).val());
if( val<min || max<val)
{
alert("Error!");
$(t).val($(t).data('oldValue'));
}
});
});
警告:某些浏览器尚不支持此功能。更安全的方法是检查输入值,而不是劫持按键并尝试过滤按键代码
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
通过这种方式,用户可以自由使用键盘箭头、修改键、退格、删除、使用非标准键盘、使用鼠标粘贴、使用拖放文本,甚至使用辅助功能输入
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
下面的脚本允许正数和负数
1
10
100.0
100.01
-1
-1.0
-10.00
1.0.0 //not allowed
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
var input=document.getElementById'number';
input.onkeyup=input.onchange=enforceFloat;
//强制执行只能输入浮点值
函数强制浮点{
var valid=/^\-?\d+\.\d*$^\-?[\d]*$/;
变量编号=/\-\d+\.\d*\-[\d]*.[\d]+\.[\d]*.[\d]+/;
if!valid.testthis.value{
var n=this.value.matchnumber;
this.value=n?n[0]:;
}
}
您还可以将默认视为字符串的输入值与强制为数字的输入值进行比较,如:
if(event.target.value == event.target.value * 1) {
// returns true if input value is numeric string
}
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
但是,您需要将其绑定到keyup等事件。只是jQuery使用的另一个变体
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
JavaScript代码:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
function validate(evt)
{
if(evt.keyCode!=8)
{
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
var regex = /[0-9]|\./;
if (!regex.test(key))
{
theEvent.returnValue = false;
if (theEvent.preventDefault)
theEvent.preventDefault();
}
}
}
HTML代码:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
<input type='text' name='price' value='0' onkeypress='validate(event)'/>
因为backspace键代码是8,而正则表达式不允许这样做,所以这是一种绕过bug的简单方法:这是的扩展版本。支持最小和最大属性。如果数字超出范围,将显示上一个值
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
用法:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
如果输入是动态的,则使用以下方法:
<input id="numbersOnly" pattern="[0-9.]+" type="text">
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
$(document).ready(function(){
$("body").on("focus","input[type=text].number,.NUMBER",function(e){
$(e.target).data('oldValue',$(e.target).val());
});
$("body").on("keypress","input[type=text].number,.NUMBER",function(e){
e.target.oldvalue = e.target.value;
number(e);
});
$("body").on("change","input[type=text].number,.NUMBER",function(e){
var t = e.target
var min = $(t).attr("min");
var max = $(t).attr("max");
var val = parseInt($(t).val());
if( val<min || max<val)
{
alert("Error!");
$(t).val($(t).data('oldValue'));
}
});
});
允许所有类型的数字(实数负、实数正、整数负、整数正)的最佳方法是:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
$(input).keypress(function (evt){
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[-\d\.]/; // dowolna liczba (+- ,.) :)
var objRegex = /^-?\d*[\.]?\d*$/;
var val = $(evt.target).val();
if(!regex.test(key) || !objRegex.test(val+key) ||
!theEvent.keyCode == 46 || !theEvent.keyCode == 8) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
};
});
JavaScript
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
function validateNumber(evt) {
var e = evt || window.event;
var key = e.keyCode || e.which;
if (!e.shiftKey && !e.altKey && !e.ctrlKey &&
// numbers
key >= 48 && key <= 57 ||
// Numeric keypad
key >= 96 && key <= 105 ||
// Backspace and Tab and Enter
key == 8 || key == 9 || key == 13 ||
// Home and End
key == 35 || key == 36 ||
// left and right arrows
key == 37 || key == 39 ||
// Del and Ins
key == 46 || key == 45) {
// input is VALID
}
else {
// input is INVALID
e.returnValue = false;
if (e.preventDefault) e.preventDefault();
}
}
HTML
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
这么简单
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
//在JavaScript函数中,可以使用HTML或PHP
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
在表单输入中:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
使用输入最大值。上面这些允许12位数字使用此DOM:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
<input type = "text" onkeydown = "validate(event)"/>
…或此脚本,不带indexOf,使用两个for的
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
我使用了onkeydown属性而不是onkeypress,因为onkeydown属性是在onkeypress属性之前检查的。问题出在谷歌Chrome浏览器上
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
在google chrome上,属性onkeypress使TAB无法控制,而属性onkeydown使TAB变得可控制
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
选项卡的ASCII代码=>9
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
第一个脚本的代码少于第二个脚本,但是,ASCII字符数组必须具有所有键
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
第二个脚本比第一个脚本大得多,但数组不需要所有键。数组每个位置的第一位数字是每个位置的读取次数。对于每个读数,将增加1到下一个读数。例如:
n计数=0
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
48+n计数=48
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
n计数++
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
48+n计数=49
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
n计数++
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
48+n计数=57
在数字键的情况下,只有10 0-9,但是
如果它们是100万,那么创建一个包含所有这些键的数组是没有意义的
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
ASCII码:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
8==>退格;
46=>删除;
37=>左箭头;
39=>右箭头;
48-57=>数字;
36=>家;
35=>结束;
我选择使用这里提到的两个答案的组合,即
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
及
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
input type=number是HTML5的一个属性
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
在另一种情况下,这将帮助您:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : evt.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
<input type="number" name="somecode" onkeypress="return isNumberKey(event)"/>
您可以为此使用模式:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
<input id="numbers" pattern="[0-9.]+" type="number">
.这里有一个简单的方法,只允许一个小数点,但不能超过:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
这里的大多数答案都有使用关键事件的弱点
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
许多答案会限制你使用键盘宏、复制+粘贴和其他不需要的行为选择文本的能力,其他答案似乎依赖于特定的jQuery插件,而jQuery插件正在用machineguns杀死苍蝇
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
这个简单的解决方案似乎最适合我跨平台工作,无论输入机制是击键、复制+粘贴、右键单击复制+粘贴、语音转换为文本等等。。所有的文本选择键盘宏仍然可以工作,它甚至会限制用户通过脚本设置非数值的能力
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
function forceNumeric(){
var $input = $(this);
$input.val($input.val().replace(/[^\d]+/g,''));
}
$('body').on('propertychange input', 'input[type="number"]', forceNumeric);
请找到下面提到的解决方案。在这种情况下,用户只能输入数值,也不能复制、粘贴、拖放输入
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
允许字符
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
事件中不允许使用字符和字符
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
字母值
特殊字符
复制
粘贴
拖曳
滴
$document.readyfunction{
$'number'.bindcut复制粘贴拖放,函数E{
e、 防止违约;
};
};
函数是numberkeyevt{
var charCode=evt.which?evt.which:evt.keyCode;
如果charCode>31&&charCode<48 | | charCode>57
返回false;
返回true;
}
还有一个示例,您只能在输入字段中添加数字,不能添加字母
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
现在只需使用type=number,大多数浏览器都支持该属性
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
<input type="number" maxlength="3" ng-bind="first">
解决此问题的一个简单方法是实现jQuery函数,用regex验证文本框中键入的字符,例如:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
您的html代码:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
<input class="integerInput" type="text">
$function{
$'.integerInput'.在'input'上,函数{
this.value=this.value
.replace/[^\d]/g;//仅限数字和小数
};
};
我看到了一些很棒的答案,但我喜欢它们尽可能小和简单,所以也许有人会从中受益。我会使用javascript数字和isNaN功能,如下所示:
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
if(isNaN(Number(str))) {
// ... Exception it is NOT a number
} else {
// ... Do something you have a number
}
希望这有帮助。eeepc 900上的德语设置。一些用于良好使用的键不起作用:-退格键代码:8-导航键左键和右键代码:37,38复制和粘贴也是可能的…大多数人都很在意,出现脚本错误反映了你的网站不好。此代码没有什么问题。你可以进去。不止一次,第二次它不允许删除键,有什么解决办法吗?我关心的是退格,删除和箭头不起作用。如果删除event.keycode | |,并添加:If/[-~]/&&!regex.testkey{那么它对ASCII/UTF确实更有效。但是它不会拒绝汉字!:这允许有人将随机内容粘贴到输入端。我必须给regex指定为^\\d\\.?\\d*$,但这可能是因为页面是通过XSLT转换运行的。我认为正则表达式是不正确的。我使用了以下行:var regExpr=/^\d+\.\d*?$/;@costa不确定用户是否要输入.123而不是0.123,例如?@romaintaz。您是对的,但是您必须更改正则表达式,以确保在点前面没有数字的情况下,点后面有数字。类似于:var regExpr=/^\d+.\d*?$^.\d+$/;这里有许多解决方案当按下键时,这些键将无法工作。如果人们使用菜单粘贴文本,或者将文本拖放到文本输入中,这些键将失败。我以前就被这种情况咬过。小心!@JuliusA-无论如何,您总是需要服务器端验证。@Drogans注意,它也会禁用任何其他键,如TAB键,以转到下一个输入或任何其他快捷方式不直接参与输入,如cmd+R,用于在输入集中的情况下刷新网站。如果您对插件没有意见,请使用NumericiInput。演示:此处的更多详细信息input type=number是HTML 5格式的-您可以使用JavaScript作为一种后备多填充…很好的方法,但可以通过按住不可接受的键更改R来打破egex到/[^\d+]/,它与保持一起工作down@boecko谢谢,但请注意,它应该是/[^\d]+/。不过这是一个很好的解决方案。另外@user235859他也想允许。太好了。你实际上应该让它成为/[^0-9。]/gHTML5也有.True。你应该回答这个问题。Ooops,@Ms2ger已经有了。在某些浏览器中添加了用于增加和减少的箭头,因此这似乎是一个很好的解决方案,当我们想避免spinnerPattern只在提交时才被检查。你仍然可以输入字母。pattern属性中的+表示什么?@UserB这应该没有不要删除任何内容。不要这样做!这会阻止
$(".numeric").keypress(function() {
return (/\d/.test(String.fromCharCode(event.which) ))
});
一切,numpad,箭头键,删除键,快捷键,比如CTRL+A,CTRL+R,甚至是TAB键,它真的很有趣@Korri我不明白,有什么问题吗?在我的例子中,它确实工作得很好。第一行必须更改为:var charCode=evt.which?evt.which:evt.keyCode;虽然这将是一个不错的选择,但它仍然允许输入字符,如/、多点、其他运算符等。Firefox 21仍然不支持。我甚至不谈论IE9或更早版本……type=数字实际上并不阻止在字段中输入无效文本;看起来您甚至可以将垃圾数据剪切并粘贴到字段中,即使在chrome中也是如此。jQuery variant允许在键盘布局上有其他符号,其中数字行上有其他符号,例如AZERTY键盘或立陶宛键盘。我唯一要添加的是更改Ctrl+A行以包含MacOSX用户:e.keyCode==65&&e.ctrlKey==true | | e.metaKey==true优秀答案+1.您还可以将if语句缩减为:return!charCode>31&&charCode<48 | | charCode>57;但是删除怎么样?您想要数字,但您可能希望人们能够在不刷新页面的情况下更正数字…在必须使用shift键输入数字的键盘上无法正常工作,例如欧洲AZERTY键盘。谢谢,伙计,您真的理解一个问题!很好的例子和越轨处理。或者,这是大多数人在使用数字时想要的。这是唯一一个可以防止粘贴非数字值的方法。下面是一个文档,定义了哪些浏览器支持此属性:。在撰写本文时,Chrome和Safari都完全支持此类型字段。IE 10有部分支持,Firefox不支持。type=number的唯一问题是IE9@JRod有一个旧的IE.更多的信息。第一个问题是类型=数字允许e char,因为它把E+ 10看作数字。第二个问题是不能限制输入中字符的最大数量。另一个问题是,如果类型为number,则无法获得将类型设置为,例如:tel.Why do get event在调用此函数时未定义?您是否在jQuery keypress上调用ValidateEnumber函数?当event.keyCode始终返回0时,这在Firefox上不起作用。我用新代码修复了这个问题:函数validateEnumberEvent{var key=event.which | | | event.charCode | | event.keyCode | 0;if key==8 | | key==46 | | key==37 | | key==39{return true;}否则如果key<48 | key>57{return false;}返回true;};正如@Jessica所说,你可以加上撇号甚至百分号。非常接近!但允许多个小数点。第一行必须更改为:var charCode=evt.which?evt.which:evt.keyCode;需要jQuery 1.7+版本。这是一个更完整的答案,因为它考虑了通过复制的输入。而且它也更简单!另一个正则表达式:replace/[^\d]+/g,将所有非数字替换为空字符串。不需要i不区分大小写的修饰符。这应该在顶部,因为标记中的onkey事件处理程序不应该再传播了…这肯定是最好的答案,但它不允许使用带小数的数字。知道这是怎么回事吗?@Atirag如果你想要小数,你可以改变regex/[^\d,.]+/在IE8和IE9中不起作用。看见这仍然是一个很好的答案。你也可以添加一个title=numbers来显示错误句柄:复制+粘贴,拖放,只允许1个小数点,制表符,删除,退格-使用此选项能否提取oninput中的逻辑以便全局使用?@ema-是,请参阅我的另一个答案,其中显示了如何使用类应用规则。如果在角度表单上使用此选项,则表单控制值中的值不会更新。@Mr.Simmons-很好,谢谢您指出这一点。我做了一个小的调整,应该可以解决这个问题。这似乎涵盖了大多数情况。我没有检查数据在1之前是-12个减号。我喜欢这个!如此优雅的解决方案,不涉及正则表达式。这不是问题的答案,OP要求只允许输入文本,而不是事后验证。是的,这是事实!但已经有一个被接受的答案,我认为是好的,但我认为这可能会帮助一些人,加上它是好的和干净的。如果要在输入为空时使用NaN,请使用parseFloatstr或添加空字符串检查。