在Jsp中使用EL表达式调用String类的matches方法的问题

要做什么:匹配一个字符串,如果是小数点数字,就取整数;如果不是数字,就直接显示

先看正确实现:  

<c:set var="reg" value="\d+\.?\d+" />
<c:if test="${expPerResult.matches(reg)}">
   数字
   <fmt:parseNumber integerOnly="true" value="${expPerResult}" />
</c:if>
<c:if test="${!expPerResult.matches(reg)}">
  非数字
   ${expPerResult}
</c:if>

之前的错误写法:

<c:if test="${expPerResult.matches('\d+\.?\d+')}">  
  数字
  <fmt:parseNumber integerOnly="true" value="${expPerResult}" />
</c:if>
<c:if test="${!expPerResult.matches('\d+\.?\d+')}">
  
非数字
  ${expPerResult}
</c:if>

后台异常内容:

  java.lang.IllegalArgumentException: The expression [${expPerResult.matches('\d+\.?\d+')}] is not valid. Within a quoted String only [\], ['] and ["] may be escaped with [\].

总结:在使用el表达式调用String的matches方法时,最好将正则表达式作为变量传入,原因如异常所示:表达式内要避免"\"。

posted on 2019-09-29 12:09  学习吧!老年人  阅读(780)  评论(0编辑  收藏  举报

导航