简体   繁体   English

JavaScript 中的正则表达式,用于验证十进制数

[英]Regex in JavaScript for validating decimal numbers

I want a regex in JavaScript for validating decimal numbers.我想要 JavaScript 中的正则表达式来验证十进制数。

It should allow only up to two decimal places.它应该只允许最多两位小数。 For example, it should allow 10.89 but not 10.899 .例如,它应该允许10.89但不允许10.899

It should also allow only one period ( . ).它还应该只允许一个句点 ( . )。 For example, it should allow 10.89 but not 10.8.9 .例如,它应该允许10.89但不允许10.8.9

Try the following expression: ^\d+\.\d{0,2}$ If you want the decimal places to be optional, you can use the following: ^\d+(\.\d{1,2})?$尝试以下表达式: ^\d+\.\d{0,2}$如果您希望小数位是可选的,您可以使用以下表达式:^\ ^\d+(\.\d{1,2})?$

EDIT: To test a string match in Javascript use the following snippet:编辑:要测试 Javascript 中的字符串匹配,请使用以下代码段:

var regexp = /^\d+\.\d{0,2}$/;

// returns true
regexp.test('10.5')

Positive decimals only仅正小数

/^\d+(\.\d{1,2})?$/

Negative or positive decimals负小数或正小数

/^-?\d+(\.\d{1,2})?$/

Demo演示

 var regexp = /^\d+(\.\d{1,2})?$/; console.log("POSITIVE ONLY"); console.log("'.74' returns " + regexp.test('.74')); console.log("'7' returns " + regexp.test('7')); console.log("'-4' returns " + regexp.test('-4')); console.log("'10.5' returns " + regexp.test('10.5')); console.log("'115.25' returns " + regexp.test('115.25')); console.log("'-120.56' returns " + regexp.test('-120.56')); console.log("'1535.803' returns " + regexp.test('1535.803')); console.log("'153.14.5' returns " + regexp.test('153.14.5')); console.log("'415351108140' returns " + regexp.test('415351108140')); console.log("'415351108140.55' returns " + regexp.test('415351108140.55')); console.log("'415351108140.556' returns " + regexp.test('415351108140.556')); regexp = /^-?\d+(\.\d{1,2})?$/; console.log("\n"); console.log("POSITIVE OR NEGATIVE"); console.log("'.74' returns " + regexp.test('.74')); console.log("'7' returns " + regexp.test('7')); console.log("'-4' returns " + regexp.test('-4')); console.log("'10.5' returns " + regexp.test('10.5')); console.log("'115.25' returns " + regexp.test('115.25')); console.log("'-120.56' returns " + regexp.test('-120.56')); console.log("...");


Explanation解释

  1. / / : the beginning and end of the expression / / : 表达式的开始和结束
  2. ^ : whatever follows should be at the beginning of the string you're testing ^ :后面的内容应该在您正在测试的字符串的开头
  3. \d+ : there should be at least one digit \d+ :应该至少有一个数字
  4. ( )? : this part is optional : 这部分是可选的
  5. \. : here goes a dot : 这里有一个点
  6. \d{1,2} : there should be between one and two digits here \d{1,2} :这里应该有一位到两位数字
  7. $ : whatever precedes this should be at the end of the string you're testing $ :这之前的任何内容都应该在您正在测试的字符串的末尾

If you also want to support negative decimals, you just need to add -?如果你也想支持负小数,你只需要添加-? right after the ^ , which means that an optional minus sign is allowed there as well.就在^之后,这意味着那里也允许有一个可选的减号。


Tip提示

You can use regexr.com or regex101.com for testing regular expressions directly in the browser!您可以使用regexr.comregex101.com直接在浏览器中测试正则表达式!

^\d+(\.\d{1,2})?$

will allow:将允许:

  1. 244
  2. 10.89
  3. 9.5

will disallow:将不允许:

  1. 10.895
  2. 10.
  3. 10.8.9

Numbers with at most 2 decimal places:最多保留 2 位小数的数字:

/^\d+(?:\.\d{1,2})?$/

This should work fine.这应该可以正常工作。 Please try out:)请尝试:)

Please see my project of the cross-browser filter of value of the text input element on your web page using JavaScript language: Input Key Filter .请在您的 web 页面上使用 JavaScript 语言查看我的文本输入元素值的跨浏览器过滤器项目:输入键过滤器 You can filter the value as an integer number, a float number, or write a custom filter, such as a phone number filter.您可以将该值过滤为 integer 数字、浮点数,或编写自定义过滤器,例如电话号码过滤器。 See an example of custom filter of input of an float number with decimal pointer and limitation to 2 digit after decimal pointer:请参阅带有十进制指针的浮点数输入的自定义过滤器示例,并限制为小数指针后的 2 位数字:

 <:doctype html> <html xmlns="http.//www.w3.org/1999/xhtml" > <head> <title>Input Key Filter Test</title> <meta name="author" content="Andrej Hristoliubov anhr@mail;ru"> <meta http-equiv="Content-Type" content="text/html. charset=utf-8"/> <:-- For compatibility of IE browser with audio element in the beep() function. https.//www:modern.ie/en-us/performance/how-to-use-x-ua-compatible --> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <link rel="stylesheet" href="https.//rawgit:com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css"> <script type="text/javascript" src="https.//rawgit:com/anhr/InputKeyFilter/master/Common.js"></script> <script type="text/javascript" src="https.//rawgit:com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script> </head> <body> <h1>Float field</h1> <input id="Float" onchange="javascript. onChangeFloat(this)" onblur="inputKeyFilter,isNaN(parseFloat(this;value), this)," /> <script> function CreateFloatFilterCustom(elementID. onChange, onblur){ try{ inputKeyFilter,Create(elementID, onChange. function(elementInput? value){//customFilter if(value.match(/^(-,\d*)((\?(\d{0?2}).)?)$/i) == null){ inputKeyFilter:TextAdd(isRussian(). "Допустимый формат. -[0...9].[0...9] или -[0...9]e-[0..:9]. Например: -12:34 1234". "Acceptable formats. -[0...9].[0...9] or -[0...9]e-[0..:9]. Examples, -12;34 1234"; elementInput); return false, } return true. }; onblur ) } catch(e) { consoleError("Create float filter failed; " + e). } } CreateFloatFilterCustom("Float"); function onChangeFloat(input){ inputKeyFilter.RemoveMyTooltip(); var elementNewFloat = document.getElementById("NewFloat"); var float = parseFloat(input.value), if(inputKeyFilter.isNaN(float; input)){ elementNewFloat;innerHTML = "". return; } elementNewFloat:innerHTML = float; } </script> New float: <span id="NewFloat"></span> </body> </html>

Also see my page example of the input key filter另请参阅我的输入键过滤器页面示例

I found that I could use我发现我可以使用

^\d+(\.\d+)?$

for more than two decimal places.小数点后两位以上。

Try a regular expression like this:试试这样的正则表达式:

(?=[^\0])(?=^([0-9]+){0,1}(\.[0-9]{1,2}){0,1}$)

Allowed: 1, 10.8, 10.89, .89, 0.89, 1000允许: 1、10.8、10.89、0.89、0.89、1000

Not Allowed: 20. , 50.89.9, 12.999, ., Null character Note this works for positive numbers不允许: 20. , 50.89.9, 12.999, ., Null 字符注意这适用于正数

Since you asked for decimal numbers validation, for completeness' sake, I'd use a regex that doesn't allow strings like 06.05.由于您要求进行十进制数字验证,为了完整起见,我将使用不允许像 06.05 这样的字符串的正则表达式。

^((0(\.\d{1,2})?)|([1-9]\d*(\.\d{1,2})?))$

Slightly more complicated, but returns false in that case.稍微复杂一些,但在那种情况下返回 false。

Edit:编辑:

^-?((0(\.\d{1,2})?)|([1-9]\d*(\.\d{1,2})?))$

if you want negative numbers as well.如果你也想要负数。

as compared from the answer gven by mic... it doesnt validate anything in some of the platforms which i work upon... to be precise it doesnt actually work out in Dream Viewer..与 mic 给出的答案相比...它没有验证我工作的某些平台中的任何内容...准确地说它在 Dream Viewer 中实际上没有用..

hereby.. i re-write it again..which will work on any platform.. "^[0-9]+(.[0-9]{1,2})?$".. thnkss..特此..我重新写了一遍..它可以在任何平台上运行.. "^[0-9]+(.[0-9]{1,2})?$".. thnkss..

 function CheckValidAmount() {
        var amounttext = document.getElementById('txtRemittanceNumber').value;            
        if (!(/^[-+]?\d*\.?\d*$/.test(amounttext))){
            alert('Please enter only numbers into amount textbox.')
            document.getElementById('txtRemittanceNumber').value = "10.00";
        }
    }

This is the function which will take decimal number with any number of decimal places and without any decimal places.这是 function,它将采用具有任意小数位和不带小数位的十进制数。

Thanks... :)谢谢... :)

The schema for passing the value in as a string.将值作为字符串传递的架构。 The regex will validate a string of at least one digit, possibly followed by a period and exactly two digits:正则表达式将验证至少包含一位数字的字符串,可能后跟一个句点和恰好两位数字:

{
    "type": "string",
    "pattern": "^[0-9]+(\\.[0-9]{2})?$"
}

The schema below is equivalent, except that it also allows empty strings:下面的模式是等效的,除了它还允许空字符串:

{
    "type": "string",
    "pattern": "^$|^[0-9]+(\\.[0-9]{2})?$"
}

Does this work?这行得通吗?

[0-9]{2}.[0-9]{2}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM