嘿所有人我正在以角度工作,我正在尝试创建一个过滤器,只允许格式为"any amount of digits . any amount of digits"
的数字,否则会阻止输入,如果它不是[0-9.]
的格式。该模式仍然允许在输入字段中使用此000.00.
之类的数字。
如何阻止它插入最后一个小数点?感谢您提前帮助!
码
$scope.filterValue = function($event, value){
var char = String.fromCharCode($event.keyCode);
if(value === null){
if(isNaN(char)){
$event.preventDefault();
}
}else{
var pattern = /^-?[0-9]{0,}\.?[0-9]{0,}$/;
if(pattern.test(value)){
if(isNaN(char) && (value.indexOf(".") == value.length-1)){
$event.preventDefault();
}
}else{
$event.preventDefault();
}
}
};
答案 0 :(得分:2)
我会引用一个由人写的article on floating point and regex,比我聪明。这是正则表达式建议:
^[-+]?[0-9]*\.?[0-9]+$
并解释 - 它定义了可选和强制输入。在这种情况下,您希望至少有一个数字是最终[0-9]+
,但您还允许更多数字和可选的点字符。正则表达式还允许数字以+
或-
var regex = /^[-+]?[0-9]*\.?[0-9]+$/;
var test = function(input) {
console.log("Testing ["+ input + "]. Result: " + (regex.test(input) ? "passes" : "fails"));
}
//valid
test("1");
test("2.1");
test("3.14");
test("-4");
test("+5");
test(".6");
test("-.7");
test("+.8");
//invalid
test(""); // yes - empty string
test(".");
test("-");
test("+");
test("-.");
test("+.");
test("9.");
test("10..1");
test("11.1.2");
test(".12.1");
test("..13");
test("-.14.");
test("+..15");
答案 1 :(得分:0)
$scope.filterValue = function($event, value){
var char = String.fromCharCode($event.keyCode);
if(value === null){
if(isNaN(char)){
$event.preventDefault();
}
}else{
var pattern = /^-?([0-9]{1,})(?:\.[0-9]+)?$/;
if(pattern.test(value)){
if(isNaN(char) && (value.indexOf(".") == value.length-1)){
$event.preventDefault();
}
}else{
$event.preventDefault();
}
}
};
试试这个
var regex = /^-?([0-9]{1,})(?:\.[0-9]+)?$/;
答案 2 :(得分:0)
这些正则表达式应涵盖您可能需要的内容
总体假设是必须输入所以我们使用
交替积极检查表格。
这不需要点
^-?(?:\d+(?:\.\d*)?|\.\d+)$
^
-?
(?:
\d+ # Digits
(?: \. \d* )? # Optional ( dot, optional ( digits ) )
| # or,
\. \d+ # Dot, digits
)
$
这需要一个点
^-?(?:\d+\.\d*|\.\d+)$
^
-?
(?:
\d+ # Digits
\. \d* # Dot, optional digits
| # or,
\. \d+ # Dot, digits
)
$