电话号码可视化模式 - space 每两个号码后

Tel Number visualization pattern - space after every second number

我有一个 Editabe 数据表。用户将电话号码插入输入文本框的 tel 列并单击 ok 按钮后,我需要将其可视化如下:

输入 390239266655

输出 +39 02 39 26 66 55

所以我需要在每个第二个数字后面放一个space,并将+放在开头。 我该怎么做?

以下是我的验证:

    <ui:define name="validation-tag">
                <f:validateRegex pattern="[0-9+]*" for="contactPhoneNumber" />
    </ui:define>

我们不得不写一个转换器,这里是解决方案:

@FacesConverter(value = "phoneConverter")
public class PhoneConverter
    implements
    Converter {

@Override
public Object getAsObject(
        FacesContext context,
        UIComponent component,
        String value) {
    String stringToDisplay = null;
    //
    //      if (value != null && !value.equals("") && value.startsWith("+")) {
    //          stringToDisplay = value.substring(1).trim();
    //      }
    return stringToDisplay;
}

@Override
public String getAsString(
        FacesContext context,
        UIComponent component,
        Object value) {
    String stringToDisplay = (String) value;
    String resultToDisplay = null;
    try {
        //          if (!stringToDisplay.startsWith("+")) {
        if (stringToDisplay != null && !stringToDisplay.equals("")) {
                            resultToDisplay = getPhoneNumbFormat(stringToDisplay);
            }
        }

    } catch (Exception e) {
        log.error("PhoneConverter replaceAll failed!!! object:={} NOT FOUND!!!", stringToDisplay, e);
    }

    return resultToDisplay;

}

    private String getPhoneNumbFormat(
        String phoneNumber) {
    String resultToDisplay = null;
    if (!phoneNumber.startsWith("+")) {
        resultToDisplay = "+" + phoneNumber.substring(0, 2).concat(" ") + phoneNumber.substring(2).replaceAll("(.{2})(?!$)", " ");
    } else if (!phoneNumber.substring(0, 3).startsWith(" ")) {
        resultToDisplay = phoneNumber.substring(0, 3).concat(" ") + phoneNumber.substring(3).replaceAll("(.{2})(?!$)", " ");
    }
    return resultToDisplay;
}
}