如何编写可严格匹配整数、浮点数的JavaScript正则表达式?
问题原因
你现在写的正则存在两个核心问题:
- 没有添加首尾锚点
^和$,只会匹配字符串中符合规则的局部内容,不会校验整个输入是否完全符合格式 - 浮点数正则中小数点相关规则被设为可选,导致纯整数也能匹配成功
严格匹配整数的正则
要求整个输入完全是整数,不允许出现小数点、字母等其他字符,支持正负号:
// 不允许前导零(除了单个0的情况) const strictInt = /^[-+]?(0|[1-9]\d*)$/ // 如果允许前导零(比如00123也判定为合法整数)可以用这个版本 // const strictInt = /^[-+]?\d+$/
匹配验证:
- 匹配成功:
123、+456、-789、0 - 匹配失败:
4848.48、12a3、0123(无前置零版本)
严格匹配浮点数的正则(与整数互斥)
要求必须包含小数点,不会匹配纯整数,支持正负号:
// 允许小数点前后单侧缺省(比如.123、123.都判定为合法浮点数) const strictFloat = /^[-+]?(\d+\.\d*|\.\d+)$/ // 如果要求小数点前后必须都有数字(只能是x.y格式)可以用这个版本 // const strictFloat = /^[-+]?\d+\.\d+$/ // 如果需要支持科学计数法(比如1.2e3、-4E5)可以用这个版本 // const strictFloat = /^[-+]?(\d+\.\d*|\.\d+)([eE][+-]?\d+)?$/
匹配验证(基础版本):
- 匹配成功:
123.4、+56.78、-9.0、.123、123. - 匹配失败:
1234、4848.48.48、12a.3
内容的提问来源于stack exchange,提问作者Phoxett
相关产品推荐
相关产品推荐

