我们正在寻找一种方法来标准化输入表格中输入的电话号码,例如,(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#'
)
对此的任何想法都将不胜感激。
答案 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;
}