2017-07-07 4 views
1

Comment puis-je détecter si une valeur de chaîne ne comporte qu'une ou plusieurs virgules et rien d'autre? La valeur correcte devrait être quelque chose comme: ABC, BVC, BNM mais parfois je reçois de la valeur comme:, ou ,,, ou ,, et ce n'est pas autorisé. Comment puis-je détecter qu'une chaîne ne comporte qu'une ou plusieurs virgules, puis je peux créer un avertissement à l'utilisateur et arrêter le processus.Recherche d'une ou plusieurs virgules dans une chaîne avec ColdFusion

Merci

Répondre

0

Cela dépend de combien votre entrée peut varier, mais comme vous le décrivez actuellement il:

Quelque chose d'aussi simple que <cfif MyVar contains ",,"> fonctionnerait.

Si une virgule (et rien d'autre) est une possibilité, puis

<cfif MyVar contains ",," OR Len(MyVar) lt 2> 
1

Vous pouvez utiliser listToArray() et arrayToList() pour supprimer les éléments vides dans la liste et pouvez ensuite comparer la version aseptisée avec l'original comme celui-ci :

<cfset originalInput = trim(",,,")> 
<cfset sanitizedInput = arrayToList(listToArray(originalInput, ",", false), ",")> 

<!--- Compare both ---> 
<cfif originalInput NEQ sanitizedInput> 

    <!--- Throw error ---> 

</cfif> 
0

en supposant une sont soit des lettres ou des chiffres non-virgules, vous pouvez faire utiliser une expression régulière:

patternAlphaNumeric = "[0-9a-zA-Z]"; 
testString = ",,,"; 

if (reFind(",", testString) > 0 && refind(patternAlphaNumeric, testString) == 0) 
code for all commas 
else 
code for other characters 
0

Si vous ne souhaitez détecter que les virgules (ou un ou plusieurs des caractères), utilisez simplement ListLen().

  • Il s'agit d'une fonction ColdFusion native.
  • Il ignore les éléments de liste vides par défaut.
  • Son délimiteur par défaut est une virgule.

Donc, si your_string se compose uniquement d'un ou plusieurs virgules, puis ListLen (your_string) retournera toujours 0.

Heads up, elle retourne aussi 0 pour une chaîne vide, donc si vous ne voulez pas que votre code apparaisse pour des chaînes vides, veillez à en tenir compte.

0
<cfset local.myString = "string-goes-here"> 
<cfset local.myNewString = ReReplace(trim(local.myString),",","","ALL")> 
<cfif not len(local.myNewString)> 
    <!--- warning to the user and stop the process ---> 
</cfif>