2011-12-24 5 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#' 
) 

이 모든 의견을 환영합니다.

+0

정말 cfqueryparam을 사용해야합니다. 사용자 액세스 가능 데이터를 쿼리에 직접 삽입하지 마십시오. SQL 인젝션 공격을받을 위험이 있습니다. '# 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

감사합니다. – Nietzsche

+0

DB에 넣기 전에 번호를 지우지 말고 직접 또는 다른 사람에게 표시 할 때 정리하십시오. 그렇게하면 항상 입력 한 내용을 보여줄 수 있습니다. –

+1

입력 한 전화 번호와 정리 된 버전을 모두 저장합니다. DB에 정리 된 버전의 색인이있어서 전화 번호로 훨씬 빨리 검색 할 수 있습니다. – Yisroel