2

我们正在寻找一种方法来标准化以表格形式输入的电话号码条目,例如 (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#'
)

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

4

2 回答 2

11

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

<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>

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

于 2011-12-24T04:40:24.927 回答
1

我喜欢斯科特的方法。所以我将它结合起来并为<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;
}
于 2020-05-02T05:04:38.663 回答