Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式键入时强制输入字段中的特定格式_Javascript_Regex - Fatal编程技术网

Javascript 使用正则表达式键入时强制输入字段中的特定格式

Javascript 使用正则表达式键入时强制输入字段中的特定格式,javascript,regex,Javascript,Regex,我希望防止在字段中使用除正式正确百分比以外的任何其他格式,而即使执行了击键,也不会显示任何其他输入 现在,我有以下代码不允许我实现我的结果: $("input").keypress(function (e) { var regex = /\d{1,4}\.?\d{0,3}/g; var key = String.fromCharCode(!e.charCode ? e.which : e.charCode); if (!regex.test(key)) { e.preventDefaul

我希望防止在字段中使用除正式正确百分比以外的任何其他格式,而即使执行了击键,也不会显示任何其他输入

现在,我有以下代码不允许我实现我的结果:

$("input").keypress(function (e) {
var regex = /\d{1,4}\.?\d{0,3}/g;
var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
if (!regex.test(key)) {
    e.preventDefault ? e.preventDefault() : e.returnValue = false;
}
});
虽然有许多选项可以事后验证,例如使用按钮,但我真的希望在用户键入时动态验证。但是,这个表达式甚至不允许我在第一个数字后插入小数点。

不是JS开发人员(欢迎评论!),但是现在您正在针对单个键测试正则表达式,因此只允许数字键

假设只允许1-4位数字,后面可能跟一个
,最多三位数字,则可以使用正则表达式:

/^\d{1,4}(?:\.\d{0,3})?$/
(?:…)
是非捕获组,
^$
是匹配字符串开头和结尾的锚。请注意,此表单还允许以
结尾(如
1234.

在JS代码中,这给出了(请参阅):


因为@Robins函数帮助了我很多,但是阻止了像Left、Right、Delete这样的键码。。。下面是第4行的一个轻微更新:
if(!e.charCode?e.which:e.charCode)>0&&!regex.test($(“输入”).val()+键)){
谢谢。但我希望我的第一个数字不是零。因为我的输入字段是price。price不能以0开头。这种情况下的正则表达式是什么?@ImZedi
\d
[0-9]
的缩写,所以你可以用
[1-9]\d{0-3}替换第一个数字
@Robin感谢您的回复。我已经尝试了这个方法,但如果我测试整个字符串,它就可以了。如果模式匹配,测试将为true。但问题在于键入,即如果我输入第一个数字,我的字符串将不会有第二个数字,因此测试填充为false。所以我无法键入任何内容。请告诉我如何克服这个问题?@ImZedi,如果您替换
^\d{1,4}
^[1-9]\d{0-3}
一起,它应该在一个只有一位数长的字符串上测试true。如果这不起作用,请在stackoverflow上创建另一个问题,这将更容易解释您的问题并获得答案:-)
var regex = /^\d{1,4}(?:\.\d{0,3})?$/;
$("input").keypress(function (e) {
    var key = String.fromCharCode(!e.charCode ? e.which : e.charCode);
    if (!regex.test($("input").val() + key)) {
        e.preventDefault ? e.preventDefault() : e.returnValue = false;
    }
});