【问题标题】:regex check for Float number -> not ending and stars with decimal point正则表达式检查浮点数 - > 不结束和带小数点的星号
【发布时间】:2021-04-13 18:49:23
【问题描述】:

我正面临浮点数的正则表达式模式问题 -> 不应该以小数点结尾或星号..

我尝试过遵循正则表达式模式.. 那是

regex = /^\d*\.?\d*$/

//在做

regex.test(11.) 
regex.test(.11) 

//检查时返回true

// 我需要把它设为假,评论会很有帮助 谢谢。

【问题讨论】:

  • 那是因为所有部分都是可选的。您可以使用^\d+(?:\.\d+)?$ 来匹配可选的点和数字。
  • 嘿@Thefourthbird,如果可以的话,你能纠正我吗?因为我需要理解它。谢谢!
  • 在您的模式中,您使用 * 表示 0 或更多,? 表示 0 或 1。因此它也可以匹配例如单个点或空字符串。因此,您必须至少匹配一个数字,然后是一个与点和数字匹配的可选部分,因此它也不能仅以点结尾。有像this page这样的例子有例子和解释stackoverflow.com/questions/308122/…
  • 11. 将被解析为 "11" 字符串,.11 将被解析为 "0.11"。将值作为字符串传递并使用^\d+(?:\.\d+)?$
  • 正则表达式只对字符串进行操作,所以你传递给它的所有数字都被强制转换为字符串。

标签: javascript regex


【解决方案1】:

您应该记住,正则表达式仅适用于字符串。当您将非字符串变量作为输入传递给RegExp 时,它会首先将其强制转换为字符串类型。

看看:

console.log(11. , 'and', .11); // => 11 and 0.11

因此,您传递给^\d*\.?\d*$ 正则表达式的实际字符串值是110.11,可以与给定模式匹配。实际上,^\d*\.?\d*$ 是一个正则表达式,通常用于非常松散的实时数字输入验证,例如见How to make proper Input validation with regex?

你想要的是实现一个最终的、提交时的验证模式,这样它就不能传递像11..11 这样的字符串。有很多线程在讨论这种正则表达式:

基本上,为了验证,您需要类似

/^\d+(?:\.\d+)?$/.test(input_string)
/^[0-9]+(?:\.[0-9]+)?$/.test(input_string)
/^[0-9]+(?:\.[0-9]{1,2})?$/.test(input_string)  // Some need to only allow 1 or 2 fractional digits
/^[0-9]{1,3}(?:\.[0-9]{2})?$/.test(input_string) // 1-3 digits in the integer part and two required in the fractional part

【讨论】:

  • 非常有帮助,但是 console.log() 在内部的作用意味着以神奇的方式转换东西!
  • @AnupamMaurya 你可能对JavaScript type coercion explained感兴趣
猜你喜欢
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 2012-09-20
  • 2017-02-03
相关资源
最近更新 更多