JSTL - formatNumber:如何以(###)#######格式显示电话号码

时间:2014-06-17 11:46:28

标签: java jsp jstl jsp-tags

我正在尝试格式化(###)#######格式的电话号码。我这样做..

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<fmt:formatNumber type="number" pattern="(###) #######" value="${phoneNumber}" />

但它没有转换是正确的格式。显示这样的价值..

输出

(9000000000)

它应该向我显示..(900)0000000

我正在拨打正常的10位数电话号码。它应该在前端以适当的格式显示我。帮帮我

2 个答案:

答案 0 :(得分:2)

让我们使用fn:substringfn:length进行尝试。

<c:set value="9123456789" var="phone"/>
<c:out value="(${fn:substring(phone, 0, 4)}) ${fn:substring(phone, 4, fn:length(phone))}"/>

输出:

(9123) 456789 

答案 1 :(得分:0)

我也需要这个。看来你不能用fmt:formatNumber来做到这一点,它只适用于纯数字:让你输入小数点和千位分隔符等等。我们想要做的就是解析字符串并以某种方式对其进行格式化,所以我猜Braj就是这样。当然,你也可以编写自己的标签。

在这种情况下,这可能是一种矫枉过正,但如果您需要全部执行此操作或者已经创建了标记库,则可能无法实现。

public class FormatTelTag extends TagSupport {
private String tel;
public FormatTelTag() { }

public int doStartTag() throws JspTagException {
    if (tel != null && !tel.isEmpty()) {
        JspWriter out = pageContext.getOut();
        try {
            out.write(formatTelephone(tel));
        } catch (IOException e) {
            throw new JspTagException(e.getMessage(), e);
        }
    }
    return EVAL_PAGE;
}

public static String formatTelephone(final String tel) {
    String formatted = null;
    if (tel == null || tel.isEmpty()) {
        formatted = tel;    
    } else {
        formatted = "";
        for (char c : tel.toCharArray()) {
            if (Character.isDigit(c)) {
                formatted = formatted + c;
                if (formatted.length() == 3 || formatted.length() == 7) {
                    formatted = formatted + "-";
                }
            }
        }
    }
    return formatted;
}

public String getTel() {
    return tel;
}
public void setTel(String tel) {
    this.tel = tel;
}

}

这将是库描述符cus.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
    <description>Custom tags</description>
    <tlib-version>1.0</tlib-version>
    <short-name>cus</short-name>
    <tag>
        <name>formatTel</name>
        <tag-class>myPackage.FormatTelTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <description>A telephone</description>
            <name>tel</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.String</type>
        </attribute>
    </tag>
</taglib>

放在web-inf下的内容可以像

一样使用
<%@ taglib prefix="cus" uri="/WEB-INF/cus"%>
...
<cus:formatTel tel="1234098766" />

我还需要在web.xml中映射此URI