检查正则表达式中的字符长度以进行金额验证

时间:2011-12-01 09:40:23

标签: regex

我有一个正则表达式来验证在字段中输入的金额:/^\d+(\.\d+)?$/

我可以以某种方式复合表达式,以便我可以检查输入的总字符数吗?它应允许最多13个字符(带/不带小数)

3 个答案:

答案 0 :(得分:3)

当然,只需在开头添加lookahead assertion

/^(?=.{0,13}$)\d+(\.\d+)?$/

^(?=.{0,13}$)确保字符串的开头和结尾之间有0到13个字符。它实际上并不匹配和使用任何这些字符,因此正则表达式的以下部分可以进行验证。

另一种方式是

/^(?!.{14})\d+(\.\d+)?$/

在这里,(?!.{14})断言在字符串的开头不能匹配14个字符,从而确保最大长度为13。

此主题的其他变体:

/^(?=.{13})\d+(\.\d+)?$/         # more than 12 characters
/^(?=.{6}$|.{8}$)\d+(\.\d+)?$/   # 6 or 8 characters

答案 1 :(得分:1)

Lookahead:

/^(?=.{0,13}$)\d+(\.\d+)?$/

答案 2 :(得分:1)

要定义最大长度,您可以使用正向前瞻

/^(?=.{0,13}$)\d+(\.\d+)?$/

(?=.{0,13}$)是一个前瞻断言,意味着前面有0到13个字符,直到字符串结尾?

您也可以单独为点之前和之后的部分执行此操作

^(?=[^.]{1,5}(?:\.|$))\d+(?:\.(?=.{1,4}$)\d+)?$

here online on Regexr

第一次向前检查不是一个点([^.])1到5次,直到它找到一个点或字符串的结尾。第二个向前看在点之后检查1到4个字符,直到字符串结束。