2011-12-24 9 views
1

フォームに入力された電話番号の入力を標準化する方法を探しています(たとえば、(444)555-666)。現在、4445556666または444-555-6666などの任意の形式で入力でき、標準化もありません。私は数値がデータベースに入力されるときに元の形式に変換される方法を欲しいです。ColdFusionで提出されたフォームで電話番号を標準化する

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

これは、他のすべてのデータとともに、コマンドINTOのcfquery INSERTを使用してデータベースに入力される:ここ

フォームのHTMLコードです。私は必要に応じてそのコードを提供することができます。

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

この上の任意の考えをいただければ幸いです。ここabbridgedバージョンです。

+0

実際にはcfqueryparamを使用する必要があります。ユーザーがアクセス可能なデータをクエリに直接挿入しないでください。あなたはSQLインジェクション攻撃の危険にさらされています。 '#form.phone_number#'をに置き換えてください –

答えて

6

私がこの問題に対処する方法は、データベースに未処理の数値を格納し、Webページでどのようにしたいかを表示することです。データベースに

<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

これはうまくいきます。 – Nietzsche

+0

DBに入れる前に番号を削除しないでください。あなた自身や他の人にそれを表示するときに削除してください。そうすれば、入力した内容を常に表示することができます。 –

+1

入力した電話番号とクリーンアップされたバージョンの両方を保存します。私はデータベースにインデックスを持っていますので、電話番号でもっと早く検索することができます。 – Yisroel

関連する問題