2010-07-20 5 views
0

par exemple, nous avons la date 12 mai 2010Remplacer une chaîne plusieurs fois en utilisant l'expression régulière

<cfset may_12_2010 = CreateDate(2010, 5, 12)> 

en utilisant DateFormat fonction, nous pouvons utiliser

DateFormat(may_12_2010, "mmmm m dddd d yyyy") 

qui montrera May 5 Wednesday 12 2010

si pour une raison quelconque, je ne peux pas utiliser la fonction DateFormat, comment nous pouvons montrer les mêmes résultats (avec le même masque) avec l'exemple ci-dessus?

code:

<cfset may_12_2010 = CreateDate(2010, 5, 12)> 

<cfset mask = "mmmm m dddd d yyyy"> 

#DateFormat(may_12_2010, mask)# 

<cfset d = DateFormat(may_12_2010, "d") /> 
<cfset dd = DateFormat(may_12_2010, "dd") /> 
<cfset ddd = DateFormat(may_12_2010, "ddd") /> 
<cfset dddd = DateFormat(may_12_2010, "dddd") /> 

<cfset m = DateFormat(may_12_2010, "m") /> 
<cfset mm = DateFormat(may_12_2010, "mm") /> 
<cfset mmm = DateFormat(may_12_2010, "mmm") /> 
<cfset mmmm = DateFormat(may_12_2010, "mmmm") /> 

<cfset yy = DateFormat(may_12_2010, "yy") /> 
<cfset yyyy = DateFormat(may_12_2010, "yyyy") /> 

<cfset stringDate = mask /> 

<cfset stringDate = REReplaceNoCase(stringDate, "d{4,4}", dddd, "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "d{3,3}", ddd, "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "d{2,2}", dd, "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "d", d, "ALL") /> 

<cfset stringDate = REReplaceNoCase(stringDate, "m{4,4}", mmmm, "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "m{3,3}", mmm, "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "m{2,2}", mm, "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "m", m, "ALL") /> 

<cfset stringDate = REReplaceNoCase(stringDate, "y{4,4}", yyyy, "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "y{2,2}", yy, "ALL") /> 

<br> 
#stringDate# 

le code ci-dessus montrera

May 5 Wednesday 12 2010 
5ay 5 We12nes12ay 12 2010 

merci

+0

Quoi? Pourquoi ne pouvez-vous pas utiliser DateFormat? –

+0

parce que l'objet "date" n'est pas réellement un objet de date CF, donc je dois le faire. de toute façon, merci pour votre réponse: D – tsurahman

+2

Je chercherais probablement encore à créer un objet date CF en premier. –

Répondre

1

Pour résoudre votre problème, il suffit de faire votre regexes:

<cfset stringDate = REReplaceNoCase(stringDate, "\bdddd\b" , dddd , "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "\bddd\b" , ddd , "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "\bdd\b" , dd , "ALL") /> 
<cfset stringDate = REReplaceNoCase(stringDate, "\bd\b" , d , "ALL") /> 
.... 

Lorsque la \b marque la position d'une "limite de mot" - qui est un changement entre un caractère de mot et un caractère non-mot, où un "caractère de mot" est [a-zA-Z0-9_] - et empêche ainsi les d de "mercredi" de correspondre.

Mais vraiment, il suffit d'utiliser la fonction DateFormat correctement!

0

Je suis confus comme pourquoi vous ne pouvez pas utiliser la dateformat. Je n'ai jamais eu la dateformat n'accepte pas une valeur, vous pouvez même simplement utiliser une chaîne, ça ne fait rien.

Questions connexes