mardi, juillet 20 2010

[RegExp] - TextField.htmlText toUpperCaser tout sauf le href

Prenez un projet, qui a pour particularité d'utiliser des TextField remplis de balises HTML pour renvoyer les utilisateurs vers les différentes rubriques du site.


var tf : TextField = addChild(new TextField()) as TextField;
var sText : String = "<a href='http://www.**.com/path/'>ma rubrique</a>";
tf.htmlText = sText

Ajoutez à ça la volonté du client de passer tous ces textes en majuscule.


var tf : TextField = addChild(new TextField()) as TextField;
var sText : String = "<a href='http://www.**.com/path/'>ma rubrique</a>";
var sUpperText : String = sText.toUpperCase();
tf.htmlText = sUpperText

Jusque-là rien de bien sorcier. Sauf qu'un beau matin de juillet vous recevez ce genre de message :

« Les liens vers les rubriques du site ** sont en majuscule. De ce fait, le navigateur ne trouve pas les pages concernées. Exemple : http://www.**.com/PATH/ Le lien devrait être simplement : http://www.**.com/path/ »

Après un grand moment de solitude, me voilà parti en quête d'une solution toute prête à l'emploi. Mais après plusieurs heures de recherche, j'ai bien dû me rendre à l'évidence qu'on n’était pas bien nombreux à avoir été confronté à ce problème.

Il ne restait plus qu'à se retrousser les manches.

Donc, avec l'aide de mon ami RegExp, il me fallait localiser l'URL dans la chaine et la passer en minuscule :


var tf : TextField = addChild(new TextField()) as TextField;
var sText : String = "<a href='http://www.**.com/path/'>ma rubrique</a>";
var sUpperText : String = sText.toUpperCase();
var url:RegExp = /href=.[^>]*/gi;
var sUpperTextAndURLLower : String = sUpperText.replace(urlfunction (m:String, ... rest):String {
return m.toLowerCase();
});
tf.htmlText = sUpperTextAndURLLower

Tout ça pour dire que la recherche sur internet c'était bien mieux quand il y avait moins de monde dessus!

++
Laurent