2011-08-30 64 views
1

我不是一个计算机科学的人,我想弄清楚如何防止用户输入多个小数点。例如,我如何阻止某人进入3..5?防止多个小数点

+0

搜索'..'并适当地惩罚他们。 – tchrist

+0

@tchrist:不会抓住像“3.14.159”这样的东西。 –

回答

1

问题中给出的背景实际上并不存在,但正确的方法是尝试使用您正在使用的任何语言来解析输入,如果失败,则拒绝它。但是,如果你想有一个正则表达式:

^\d+\.\d+$ # allows numbers with a single decimal point; 
       fails if it doesn't have one 
^\d+(\.\d+)?$ # allows numbers with a decimal point or without one 

注意这些正则表达式允许在小数点两侧的数字的数量不受限制。如果你想指定的位数,就可以使用{m...n}代替+量词:

^\d{1,3}\.\d{1,3}$ # allows numbers from 0.0 to 999.999 

编辑:如果你想允许的形式.25的输入像tchrist建议,你可以使用方法:

^\d*\.\d+?$ 
+0

为什么不简单检查它是否有2个小数点,如果是,拒绝? '。* \ .. * \ .. *' –

+1

@Joseph因为那么'$$$$。!!!'将是有效的 – NullUserException

+0

我以为他只是想防止2个小数点。看起来OP不知何故知道他只有数字和句号。好吧,我猜,安全而不是抱歉。 –

0

对于浮点数,即###。##,你可以匹配

^[0-9]+[.]{1}[0-9]{1,2}$ 

这将允许任意数量的数字,后跟一个小数(必需),后面跟一个或两个数字。

+1

'[。]''后面'{1}'的含义是什么? – NullUserException

+0

不,这不允许任何数字的数字。 '/ ^(?:\。\ d {1,2} | \ d +(?:\。\ d {0,2})?)$/x'确实。 – tchrist

+0

@tchrist为什么你把'?:'放在你的捕获组中? (我知道它是什么) – NullUserException

0

试试这个:

m{ 
    ^(?: \. \d{1,2} # eg: ".25" 
     | \d+   # eg: "2343409823409823049823094823094820389402984230948" 
       (?: 
        \. \d{0,2} 
      )?  # eg: "186282.42" 
    ) 
    $ 
}x