使用ColdFusion标准化提交表单中的电话号码

时间:2011-12-24 04:01:25

标签: coldfusion coldfusion-9

我们正在寻找一种方法来标准化输入表格中输入的电话号码,例如,(444)555-666。现在您可以输入任何格式,例如4445556666或444-555-6666,并且没有标准化。我希望在将数字输入数据库时​​将数字转换为前一种格式。

以下是表单的HTML代码:

<tr>
  <td align="right">
    <label for="phone_number">Telephone:</label>
  </td>
  <td>
    <input type="text" name="phone_number" value="#form.phone_number#" />
  </td>
</tr>

使用cfquery INSERT INTO命令将此数据与所有其他数据一起输入数据库。如果需要,我可以提供该代码。这是一个简短的版本:

INSERT INTO Schedule_Registrations(
  phone_number
)
VALUES(
  '#FORM.phone_number#'
)

对此的任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:9)

我选择处理此问题的方法是将原始数字存储在数据库中,然后在网页上显示我想要的内容。要规范化数字,请使用简单的正则表达式:

<cfset cleanPhoneNumber = reReplace(form.phoneNumber, "[^0-9]", "", "ALL")>

将cleanPhoneNumber存储在数据库中,然后使用简单的格式化功能显示它:

<cffunction name="formatPhoneNumber">
    <cfargument name="phoneNumber" required="true">

    <cfif len(phoneNumber) EQ 10>
        <!--- This only works with 10-digit US/Canada phone numbers --->
        <cfreturn "(#left(phoneNumber, 3)#) #mid(phoneNumber, 4, 3)#-#right(phoneNumber, 4)#">
    </cfif>

    <cfreturn phoneNumber>
</cffunction>

挑战在于,在美国之外,没有标准化的数字格式化方式(我发现)。如果您允许用户在电话号码字段中输入分机,也要小心。

答案 1 :(得分:1)

我喜欢Scott的方法。因此,我将其组合并为<cfscript>

创建了一个函数
string function formatPhone(required string phoneNumber) output="false"    {

    arguments.phoneNumber = reReplace(arguments.phoneNumber, "[^0-9]", "", "ALL");

    if (len(arguments.phoneNumber) == 10)   {
        return "(#left(arguments.phoneNumber, 3)#) #mid(arguments.phoneNumber, 4, 3)#-#right(arguments.phoneNumber, 4)#";
      }

    return arguments.phoneNumber;
}