如何在JSTL中检查isNumeric/IsNumber

Ste*_*hev 6 jsp jstl isnumeric

如何在JSTL中执行此简单检查(不扩展任何java类和其他JSP函数).我需要这样:

<c:if test="${fn:isNumeric()}">
 ... do something ...
</c:if>
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Bal*_*usC 9

如果您的环境支持在EL对象上调用非getter方法的新EL 2.2功能(可在所有Servlet 3.0兼容容器中使用,例如Tomcat 7,Glassfish 3等),那么您可以String#matches()直接在EL中使用该方法.

<c:set var="numberAsString">${someExpressionToTestForNumber}</c:set>
<c:if test="${numberAsString.matches('[0-9]+')}">
    It's a number!
</c:if>
Run Code Online (Sandbox Code Playgroud)

(我会留下减号-和数千和分数分隔符,以及.外部考虑因素,这些字符可能出现在技术上有效的数字中)

请注意,<c:set>在其正文String使用表达式会隐式地将任何类型转换为使用String#valueOf().否则,对于非类型,matches()调用<c:if>将失败String.


ric*_*ckz 6

如果你真的坚持

(不扩展任何java类和其他JSP函数)

然后你可以使用以下hack.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="x" value="8" />
<c:catch var="isNumber">
   <c:set var="x" value="${x * 1}" />
</c:catch>
<c:if test="${isNumber == null}">
    ... do something ...
</c:if>
<c:if test="${isNumber != null}">
      ... do not do anything...
</c:if>
Run Code Online (Sandbox Code Playgroud)