我有一个正则表达式来验证在字段中输入的金额:/^\d+(\.\d+)?$/
我可以以某种方式复合表达式,以便我可以检查输入的总字符数吗?它应允许最多13个字符(带/不带小数)
答案 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+)?$
第一次向前检查不是一个点([^.]
)1到5次,直到它找到一个点或字符串的结尾。第二个向前看在点之后检查1到4个字符,直到字符串结束。