我希望在不影响跟随正则表达式的功能的情况下接受文本字段的负值:
(?!^0*$)(?!^0*[.]0*$)^[0-9]{1,8}([.][0-9]{1,2})?$
代表:-12.12,-1223233.23,-32323.32
感谢。
答案 0 :(得分:2)
你的正则表达式具有前瞻性,每个都在字符串内的每个位置触发。为了使正则表达式更高效,并且可以根据需要进行修改,您需要将^
移出前瞻:^(?!0*$)(?!0*[.]0*$)^[0-9]{1,8}([.][0-9]{1,2})?$
。
现在,您需要在开始时添加可选的减号。 “可选”表示 1或0次出现。在JavaScript中,您可以使用 ?
量词(在POSIX BRE中,除了\{0,1\}
之外别无选择。)
所以,使用
^-?(?!0*$)(?!0*[.]0*$)[0-9]{1,8}([.][0-9]{1,2})?$
请参阅regex demo
正则表达式分解:
^
- 字符串开头-?
- 1或0个连字符(?!0*$)
- 确保字符串末尾没有零(如果找到零则不返回匹配)(?!0*[.]0*$)
- 确保在字符串末尾没有零+一个点+零[0-9]{1,8}
- 匹配1到8位数字([.][0-9]{1,2})?
- 1或0个序列......
[.]
- 一个文字点[0-9]{1,2}
- 1到2位$
- 字符串结束。答案 1 :(得分:1)
只需添加-?
即可将否定号添加为可选,或仅添加-
(如果必须的话)。
(?!^-?0*$)(?!^-?0*[.]0*$)^-?[0-9]{1,8}([.][0-9]{1,2})?$
修改:已修复
答案 2 :(得分:0)
这会验证整数(正数或负数)
^-{0,1}\d+$
验证十进制数(正数或负数)
^-{0,1}\d*\.{0,1}\d+$