如何显示格式化的联系电话?
Posted
技术标签:
【中文标题】如何显示格式化的联系电话?【英文标题】:How to show formatted contact numbers? 【发布时间】:2014-07-04 01:50:11 【问题描述】:我有一个名为电话号码的字段,其中包含 0833888999 之类的值,我想将其格式化为 0833 888 999。
The answer that Rachana offered blew 适用于少数国家,但并非所有国家。
因此, 我正在使用this Google library 格式化来自不同国家的联系电话;但是,问题是在数据库中保存联系号码后,我无法在数据库中搜索它们,例如,该库会以不同格式格式化不同国家/地区的联系号码,例如在它们之间添加空格或“-”使休眠找不到他们。
+18182223333 >>> +1 818-222-3333
+441135558888 >>> +44 113 555 8888
休眠
.add(Restrictions.ilike("user.phone","+18182223333");
【问题讨论】:
您认为用户为什么喜欢将电话视为格式化数字,按逗号分组? @RomanC 然后不想用逗号看到它们!他们希望看到他们成群结队。 您的电话号码是什么类型的?不要存储格式化的数字。 @AleksandrM 它的类型是电话号码,我认为另一种选择是使用同一库的 javascript 代码来格式化值,但是如果我显示这些电话号码的列表,则需要很长时间才能完成所以。 @AleksandrM 抱歉打错了它的类型是字符串。 【参考方案1】:试试这个
<s:property value="getText('0,number,0### ### ###',phone)"/>
在哪里,phone=0833888999
希望这能帮助你也看到 Using Struts2 Tags to Formatting Numbers
您将清楚地了解数字格式
【讨论】:
从链接的问题中复制粘贴。【参考方案2】:我认为您应该将原始电话号码(例如 0833888999)保留在数据库中,并由 View 负责对其进行相应的格式化。
您可以有一个单独的表 "country_phone_format" 保存 country_id 和 phone_format,您可以将 phone_format 作为 @ManyToOne 实体获取这样您就可以同时拥有原始数据和格式以将其正确显示到视图中。
PhoneFormat 可以很容易地使用二级缓存进行缓存,因为它们应该很少被修改。
【讨论】:
问题是我应该想办法找到全世界所有国际号码的模式;但是,就我而言,我可以将任务委托给 Google。 是的,但是一旦你找到了模式,你就可以将它保存到数据库中,这样下次你就不必访问任何外部服务了,因为你可以依赖自己的数据库。 我明白了,那么如何从原始数字和格式化数字中找出模式是什么?此外,在这种情况下,我不需要将模式保存在 DB 中,我可以将所有数字传递给 Google 以对其进行格式化;而不是将模式保存在数据库中并将它们格式化在我的服务器上。这种方法的问题是,如果它要显示一长串结果,它会影响系统的性能,例如。系统的 1000 名用户及其电话号码的列表。 在数据库中有模式将保证稳定的性能。依赖谷歌服务会产生大量的网络开销。有些服务有每日配额,过多的请求可能会导致您被封禁。 确实如此。但是您可以配置二级缓存,这样您就不必访问数据库来获取模式。一旦一切都在内存中,它非常快。决定应用程序性能和可扩展性的是数据库和外部服务。格式化数千种模式比从数据库中检索单个实体更快。你可以测试一下;)【参考方案3】:正如 Vlad 所提到的,您应该将原始电话号码(例如 0833888999)保存在数据库中(或者如果您愿意,可以将其与国家和地区代码一起保存),并负责根据视图对其进行格式化。
您可以使用Type Conversion 转换为您想要的格式 - 并利用您提到的谷歌库。类似以下的内容可以帮助您入门(缩写只是为了了解它的要点):
public class MyConverter extends StrutsTypeConverter
public Object convertFromString(Map context, String[] values, Class toClass)
String phoneNr = values[0]
MyPhoneObject phone = googleLibrary.doYourMagic(phoneNr);
return phone;
public String convertToString(Map context, Object o)
googleLibrary.parseString( ((MyPhoneObject)o).rawPhoneNr() );
别忘了在 xwork-conversion.properties 中注册转换器
my.PhoneObject=path.to.MyConverter
【讨论】:
以上是关于如何显示格式化的联系电话?的主要内容,如果未能解决你的问题,请参考以下文章