判斷給定字符串是否為合法數字。合法示例:"0", " 0.1 ", "2e10";非法:"abc", "1 a"。允許前後空格、符號、小數點、科學計數法 (e/E)。
Java 正則:
public boolean isNumber(String s) {
String regex = "[+-]?(\\d+\\.?|\\.\\d+)\\d*(e[+-]?\\d+)?";
return s.trim().matches(regex);
}
[+-]?:可選符號。(\\d+\\.?|\\.\\d+):整數部分可帶小數點(如 123.),或純小數(如 .123)。\\d*:小數點後的數字(可為空)。(e[+-]?\\d+)?:可選科學計數部分,e 後必須有整數(可帶符號)。
bool isNumber(string s) {
int i = 0, n = s.size();
while (i < n && isspace(s[i])) ++i;
while (n > i && isspace(s[n-1])) --n;
if (i >= n) return false;
bool num = false, dot = false, e = false;
for (; i < n; ++i) {
char c = s[i];
if (isdigit(c)) num = true;
else if (c == '+' || c == '-') {
if (i != 0 && s[i-1] != 'e' && s[i-1] != 'E') return false;
} else if (c == '.') {
if (dot || e) return false; dot = true;
} else if (c == 'e' || c == 'E') {
if (e || !num) return false; e = true; num = false; // e 後必須有數字
} else return false;
}
return num;
}