我假设语言是Java。我还假设您要验证用户输入,它只包含百分比。
"^\\s*((100(\\.0*)?|\\d{1,2}(\\.\\d*)?|\\.\\d+)%?|PASSED|FAILED)\\s*$"
(在 Groovy 中,您不必转义反斜杠)
/^\s*((100(\.0*)?|\d{1,2}(\.\d*)?|\.\d+)%?|PASSED|FAILED)\s*$/ (for Groovy)
上面的正则表达式只会验证 0.0 到 100.0 之间的数字。它允许小数点后的任意长位数,并且还允许通过.8
或等情况45.
,因为它们可以被处理。正则表达式还允许在输入之前和之后(但不是内部)有任意数量的空格。
编辑
要匹配纯文本 (ASCII):
"^\\s*((100(\\.0*)?|\\d{1,2}(\\.\\d*)?|\\.\\d+)%?|[a-zA-Z.]+)\\s*$"
/^\s*((100(\.0*)?|\d{1,2}(\.\d*)?|\.\d+)%?|[a-zA-Z.]+)\s*$/ (for Groovy)
这将匹配使用英文字母字符(不区分大小写)和全句点的文本。例如sdhSDFHS.sfSDJF.sdfSDJFI
将匹配上面的正则表达式。请注意,当前的正则表达式不允许文本中包含空格,但如果要添加更多字符,请在方括号内添加(字符类)[a-zA-Z.]
:. 查看文档以获取更多详细信息。
测试代码(Java)
String arr[] = {"100%", " .435%", "3%", "0%", "0", ".0", "hdfjs.", " PASSED", "FAILED", "34.5 ", "sdhf.sdfdsf.fsdf ", " 100.0000 ", "-234.4", "-0.1", "34.", "100.0000001", "1000"};
for (String s: arr)
System.out.println(s + " " + (s.matches("^\\s*((100(\\.0*)?|\\d{1,2}(\\.\\d*)?|\\.\\d+)%?|[a-zA-Z.]+)\\s*$") ? "matched" : "not matched"));
输出
100% matched
.435% matched
3% matched
0% matched
0 matched
.0 matched
hdfjs. matched
PASSED matched
FAILED matched
34.5 matched
sdhf.sdfdsf.fsdf matched
100.0000 matched
-234.4 not matched
-0.1 not matched
34. matched
100.0000001 not matched
1000 not matched
编辑2
讨论中提到的要求更改:仅匹配从 1.0 到 100.0 的百分比:
/^\s*((100(\.0*)?|[1-9]\d?(\.\d*)?)%?|[a-zA-Z.]+)\s*$/ (for Groovy)
这个条件比以前更严格,因为01.1
不会匹配。如果你想匹配这种情况:
/^\s*(0*((100(\.0*)?|[1-9]\d?(\.\d*)?)%?)|[a-zA-Z.]+)\s*$/ (for Groovy)