我正在尝试为JSON中的数字字符串编写正则表达式。我仍然是编写正则表达式的新手,我找到了JSON数字 here 的机器图,但我不确定如何攻击它。
以下是正则表达式应该找到的一些字符串。 “22”, “55.75466” “-44.565” “55E-2” “69234.2423432 E78” 任何帮助表示赞赏!
答案 0 :(得分:19)
供参考,这是http://www.json.org/fatfree.html的“数字”图表:
应与此匹配的正则表达式是:
-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?
答案 1 :(得分:1)
acheong87的答案应该提供你需要的正则表达式。但是,如果您只是想检查通过JSON返回的字符串“是否为数字”,那么您可以这样做:
var valueAsString = "55e-2";
var isANumber = !isNaN(valueAsString);
答案 2 :(得分:0)
以Andrew Cheong的罚款answer为基础,此版本与 Bash 兼容。细微的差异需要一段时间才能正确。
-?(0|[1-9][[:digit:]]*)(\.[[:digit:]]+)?([eE][+-]?[[:digit:]]+)?
最后,区别只是将\d
替换为[[:digit:]]
,并将?:
从替换子句中删除。
这是一个脚本,您可以将其粘贴到Bash shell中以验证其性能。正则表达式用^
和$
包围起来,分别与行的开头和结尾匹配,以检查流浪尾字符或前导字符。
while read line; do
if [[ $line =~ ^-?(0|[1-9][[:digit:]]*)(\.[[:digit:]]+)?([eE][+-]?[[:digit:]]+)?$ ]]
then
echo "$line is a number"
else
echo "$line NOT a number"
fi
done << END
1
-1
a
1a
a1
-1.0
1.
.0
.
-.0
+
+0
+.0
22
55.75466
-44.565
55e-2
69234.2423432 E78
69234.2423432E78
-
0123
END
在Bash 4.4.12中,我得到:
1 is a number
-1 is a number
a NOT a number
1a NOT a number
a1 NOT a number
-1.0 is a number
1. NOT a number
.0 NOT a number
. NOT a number
-.0 NOT a number
+ NOT a number
+0 NOT a number
+.0 NOT a number
22 is a number
55.75466 is a number
-44.565 is a number
55e-2 is a number
69234.2423432 E78 NOT a number
69234.2423432E78 is a number
- NOT a number
0123 NOT a number