我有以下正则表达式,我用来匹配/验证十进制数字:
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
因此除了负数之外,所有正数都通过了。如何扩展我的正则表达式以接受负数,例如。接受第一个字符“ - ”?
模式不必那么复杂,试试这个:
^-?\d+(\.\d+)?$
-?
是有和没有-
标志匹配的部分。 ?
表示1或0次出现。
您不需要现有的正则表达式来匹配正/负小数。你只需要在你的模式之前包含一个-?
,以匹配1或0' - '。
final String REG_PATTERN_VALID_DECIMAL_NUMBER = "-?\\d+(?:\\.\\d+)?";
如果你在前面添加一个可选字符,它应该可以工作:
final String REG_PATTERN_VALID_DECIMAL_NUMBER = "((?<!\\S)-?\\d+(?:\\.\\d+)?(?!\\S))|.";