正则表达式匹配也是负十进制数

问题描述 投票:0回答:3

我有以下正则表达式,我用来匹配/验证十进制数字:

String[] inputs = {
    "0",
    "0.0",
    "0.1",
    "-0.1",
    "-0.123",
    "-123.123",
};
final String REG_PATTERN_VALID_DECIMAL_NUMBER = "((?<!\\S)\\d+(?:\\.\\d+)?(?!\\S))|.";
for (String input : inputs) {
    boolean validInput = input.matches(REG_PATTERN_VALID_DECIMAL_NUMBER);
    System.out.println("input: " + input + " ; isValid: " + validInput);
}

输出是:

input: 0 ; isValid: true
input: 0.0 ; isValid: true
input: 0.1 ; isValid: true
input: -0.1 ; isValid: false
input: -0.123 ; isValid: false
input: -123.123 ; isValid: false

因此除了负数之外,所有正数都通过了。如何扩展我的正则表达式以接受负数,例如。接受第一个字符“ - ”?

java regex
3个回答
1
投票

模式不必那么复杂,试试这个:

^-?\d+(\.\d+)?$

-?是有和没有-标志匹配的部分。 ?表示1或0次出现。


1
投票

您不需要现有的正则表达式来匹配正/负小数。你只需要在你的模式之前包含一个-?,以匹配1或0' - '。

final String REG_PATTERN_VALID_DECIMAL_NUMBER = "-?\\d+(?:\\.\\d+)?";

1
投票

如果你在前面添加一个可选字符,它应该可以工作:

final String REG_PATTERN_VALID_DECIMAL_NUMBER = "((?<!\\S)-?\\d+(?:\\.\\d+)?(?!\\S))|.";
© www.soinside.com 2019 - 2024. All rights reserved.