2011-12-24 12 views
1

我們正在尋找一種方法來標準化輸入表單中輸入的電話號碼,例如(444)555-666。現在您可以輸入任何格式,如4445556666或444-555-6666,並且沒有標準化。我想要一個數字在輸入到數據庫時轉換爲以前格式的方法。使用ColdFusion標準化已提交表格中的電話號碼

這裏是表單的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

你應該真的使用cfqueryparam。切勿將用戶可訪問的數據直接插入到查詢中。您冒着SQL注入攻擊的風險。用#cfqueryparam cfsqltype =「cf_sql_varchar」value =「#form.phone_number#」/> –

回答

6

我選擇處理這個問題的方法是將原始數字存儲在數據庫中,然後在網頁上顯示它們的方式。爲了標準化的數字,用一個簡單的正則表達式:

<cfset CleanPhoneNumber = REReplace(form.phone_number, "[^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)#" /> 
    <cfelse> 
     <cfreturn phoneNumber /> 
    </cfif> 
</cffunction> 

的挑戰是,在美國以外有不是格式化數字的標準方式(我已經找到)。如果您允許用戶在電話號碼字段中輸入分機號碼,請注意。

+0

替換'#form.phone_number#'謝謝,這很好。 – Nietzsche

+0

我想補充一點,在將數字放入數據庫之前不要清理數字,在將數據顯示給自己或他人時將其清除。這樣你總是可以選擇向他們展示他們輸入的內容。 –

+1

我存儲輸入的電話號碼和清理後的版本。我在清潔版本的數據庫中有一個索引,所以我可以通過電話號碼更快地搜索。 – Yisroel