2009-07-19 8 views
2

Je dois valider des valeurs de formulaire en tant qu'entier.Comment gérer les nombres décimaux et les virgules séparés par des virgules dans CF?

J'ai essayé quelque chose comme ceci:

<cfloop collection="#form#"> 
<cfif form.value eq int(form.value)> 
    #form.value# is an integer 
</cfif> 
</cfloop> 

Il fonctionne aussi longtemps que l'utilisateur ne pas comma entrée comme séparateur décimal, ce qui est le chemin par défaut de le faire ici en Allemagne.

Je dois utiliser CF MX 6.1.

Répondre

4

Il serait également utile de se pencher sur les fonctions internationales disponibles. LSParseNumber(), par exemple.

+0

Wow. J'ai regardé la liste des fonctions LS et complètement oublié celui-là. –

1

Vous pouvez, si vous le souhaitez, désensibiliser l'entrée en premier.

<cfset var comma = ","> 
<cfset var period = "."> 
<cfset form.value = replace(form.value, comma, period, "all")> 

Mais, si vous avez besoin est de vérifier si un champ est un entier, pourquoi ne vous regardez pas CFLib.org - IsInt?

<cfscript> 
/** 
* Checks to see if a var is an integer. 
* version 1.1 - mod by Raymond Camden 
* 
* @param varToCheck  Value you want to validate as an integer. 
* @return Returns a Boolean. 
* @author Nathan Dintenfass ([email protected]) 
* @version 1.1, April 10, 2002 
*/ 
function isInt(varToCheck){ 
return isNumeric(varToCheck) and round(varToCheck) is vartoCheck; 
} 
</cfscript> 
1

Comme Al Everett, je recommande d'utiliser les fonctions spécifiques de paramètres régionaux:

<!--- actually *setting* the desired locale is mandatory for this to work ---> 
<cfset SetLocale("German (Standard)")> 

<cfif CGI.REQUEST_METHOD eq "POST"> 
    <!--- loop the FieldNames list so only real posted values are handled ---> 
    <cfloop list="#FORM.FieldNames#" index="FieldName"> 
    <cfif LSIsNumeric(FORM[FieldName])> 
     <cfset num = LSParseNumber(FORM[FieldName])> 
     <!--- do stuff with #num# ---> 
    </cfif> 
    </cfloop> 
</cfif> 
Questions connexes