吃水不忘挖井人系列:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="zh">
<head>
<script type="text/javascript">
var phone= '${detailList.serviceRelease.responseiblePhone}'.replace(/(\d{3}).*(\d{4})/, "$1****$2");
</script>
</head>
<body>
以下这俩正则应该都可,应对诸如 010-12345678 这种座机 以及 13312345678 这种手机号
.replace(/(\d{3}).*(\d{4})/, "$1****$2");
.replace(/^(\d{3}).*(\d{4})$/, "$1****$2");
问题是在代码里却不能这样写,否则报错 org.apache.jasper.JasperException: javax.el.ELException: Failed to parse the expression
<span>${fn:replace(detailList.serviceRelease.phone,/(\d{3}).*(\d{4})/,"$1****$2")}</span>
<span>${detailList.serviceRelease.phone.replace(/(\d{3}).*(\d{4})/, "$1****$2")}</span>
因为 EL表达式不支持正则
正常思路应该是截取length-4到length的序号位
但是也不能用诸如
<span>${fn:substring(phone,phone.length-4,phone.length)}</span>
参考内容如下: http://www.blogjava.net/lardern/archive/2009/03/22/261321.html
首先必须在JSP中声明这个标签库:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
调用方式为:fn:functionName(arg,...)
比如:${fn:length(aCollection)}
length是JSTL库中自带的函数,除此之外常的还有:
函数
描述
fn:contains(string, substring)
如果参数string中包含参数substring,返回true
fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true
fn:endsWith(string, suffix)
如果参数 string 以参数suffix结尾,返回true
fn:escapeXml(string)
将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回
fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置
fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。
fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果
fn:split(string, separator)
返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素
fn:startsWith(string, prefix)
如果参数string以参数prefix开头,返回true
fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符
fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串
fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串
fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回
fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回
fn:trim(string)
去除参数string 首尾的空格,并将其返回
最后实际上可以有效解决问题的代码是:
<span>${fn:substring(detailList.phone,0,3)}****${fn:substring(detailList.phone,fn:length(detailList.phone)-4,fn:length(detailList.phone))}</span>
2020-11-18
ALL BY MedusaSTears