文本输入的正则表达式

时间:2011-03-24 05:38:20

标签: regex

我希望允许用户输入数字,小数点前最多3位数,可选的小数位数和可选的小数位后最多2位数。

我希望它匹配:12,123,123.5,123.55,123。 我不希望它匹配:abc,1234,123.555

到目前为止我有什么: ^ \ d {0,3}(?)\ d {0,2} $

目前它仍然匹配1234.我想我需要以某种方式使用后面的运算符,但我不确定如何。

由于

4 个答案:

答案 0 :(得分:3)

试试这个:

^\d{0,3}(?:\.\d{0,2})?$

或者更好,只避免.

^(?:\d{1,3}(?:\.\d{0,2})?|\.\d{1,2})$

具体来说,请注意:

  • 转义点,或者匹配任何字符(新行除外),包括更多数字。
  • 使整个小数部分可选,包括点。也就是说 - 小数点是不是可选 - 如果我们要匹配小数部分中的任何数字,它必须包含。
  • 即使您已转义点,^\d{0,3}(\.?)\d{0,2}$也不正确。如果点为可选,则可以匹配12378\d{0,3}匹配123(\.?)与任何内容不匹配,\d{0,2}匹配78

工作示例:http://rubular.com/r/OOw6Ucgdgq

答案 1 :(得分:1)

也许这(未经测试)

^(?=.*\d)\d{0,3}\.?(?<=\.)\d{0,2}$

编辑 - 以上是错误的。

@Kobi的回答是正确的。

可以在他的第一个版本中添加一个预测,以确保不只是一个点或空字符串。

^(?=.*\d)\d{0,3}(?:\.\d{0,2})?$

答案 2 :(得分:1)

这个怎么样?

/^\d{0,2}(?:\d\.|\.\d|\d\.\d)?\d?$/

答案 3 :(得分:0)

您必须将小数点和小数的组合设为可选。在正则表达式中,只有十进制数是可选的。因为123满足^ \ d {0,3},不存在小数点满足(。?),并且4满足\ d {0,2},所以接受1234。

Kobi的回答为您提供了正确的正则表达式。