

new!








|
|
|
 |
| > Respecter la ponctuation |
[ Posté par fabiano13 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 08-05-2008 à 16:46 | 8 messages ]
  Bonjour,
J'ai créé une fonction qui formate un texte de la manière suivante :
La virgule : texte,[espace] texte
Le point-virgule : texte[espace];[espace]texte
Les deux-points : texte[espace]:[espace]texte
Le point : texte.[espace]texte
Les points de suspension : texte…[espace]texte
Le point d’interrogation : texte[espace]?[espace]texte
Le point d’exclamation : texte[espace]![espace]texte
Les guillemets : texte[espace]«[espace]texte[espace]»[espace]texte
Les parenthèses : texte[espace](texte)[espace]texte
Seulement c'est super long selon la chaine à traiter!! il me semble qu'avec des expressions régulières c'est beaucoup plus simple. Mais je n'y pige rien !
Voici le code :
<script>
function FormaterChaine(sChaine){
sPonctPrecedente = "?|;|!|:|(|[|«|»";
sPonctSuivante = "?|,|.|;|!|:|)|]|«|»";
sTabPonctSuivante = sPonctSuivante.split("|");
sTabPonctPrecedente = sPonctPrecedente.split("|");
TexteFormate1 = "";
y = 0;
for (var i=0; i<sTabPonctSuivante.length; i++) {
sPonctSuivante = sTabPonctSuivante[i];
if (y==0){
var sChaine = sChaine + "|";
LnsChaine = sChaine.length;
}else{
var sChaine = TexteFormate1 + "|";
LnsChaine = sChaine.length;
}
if (sChaine.indexOf(sPonctSuivante)!=-1){
for (var k=0; k<LnsChaine;k++){
if (sChaine.substr(k,1)==sPonctSuivante){
if(sChaine.substr(k,2)!= sPonctSuivante + " "){
TexteFormate1 = TexteFormate1 + sPonctSuivante + " ";
y=y+1
}else{
TexteFormate1 = TexteFormate1 + sPonctSuivante;
y=y+1
}}else{
TexteFormate1 = TexteFormate1 + sChaine.substr(k,1);
y=y+1
}}
}
}
sDernChaine = TexteFormate1.split("|");
LnDernChaine = sDernChaine.length;
for (var k=0; k<LnDernChaine;k++){
if (sDernChaine[k]!=""){
TexteFormate1 = sDernChaine[k];
}
}
TexteFormate1 = TexteFormate1.replace(". . .","...");
TexteFormate1 = TexteFormate1.replace(". .",".");
y=0;
TexteFormate2="";
for (var i=0; i<sTabPonctPrecedente.length; i++) {
sPonctPrecedente = sTabPonctPrecedente[i];
if (y==0){
var sChaine = TexteFormate1 + "|";
LnsChaine = sChaine.length;
}else{
var sChaine = TexteFormate2 + "|";
LnsChaine = sChaine.length;
}
if (sChaine.indexOf(sPonctPrecedente)!=-1){
for (var k=0; k<LnsChaine;k++){
if (sChaine.substr(k,1)==sPonctPrecedente){
if(sChaine.substr(k-1,2)!= " " + sPonctPrecedente){
TexteFormate2 = TexteFormate2 + " " + sPonctPrecedente;
y=y+1
}else{
TexteFormate2 = TexteFormate2 + sPonctPrecedente;
y=y+1
}}else{
TexteFormate2 = TexteFormate2 + sChaine.substr(k,1);
y=y+1
}}
}
}
sDernChaine = TexteFormate2.split("|");
LnDernChaine = sDernChaine.length;
for (var k=0; k<LnDernChaine;k++){
if (sDernChaine[k]!=""){
TexteFormate2 = sDernChaine[k];
}
}
return TexteFormate2
}
var sChaine = "Bonjour,je tente de;formater une chaine.Est-ce que c'est facile?N'est-ce pas!«Fabiano:13»[2008]A suivre...(mai 200 ";
document.write("<b>Avant :</b> <font color=green>" + sChaine + "</font><br>")
document.write("<b>Après :</b> <font color=blue>" + FormaterChaine(sChaine) + "</font>")
</script>
 
|
|
|
[ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 09-05-2008 à 15:04 | 3782 messages ]
 
<html>
<body>
<div id="toto">Bonjour,je tente de;formater une chaine.Est-ce que c'est facile?N'est-ce pas!!«Fabiano:13»[2008]A suivre...(mai 200 </div>
<script>
var val = document.getElementById("toto").innerHTML;
// on remplace un caractère à la fois
lepoint = new RegExp(/(\s*\.\s*)/g); // un certain nombre d'espaces (éventuellement nul) puis un point puis un certain nombre d'espaces (éventuellement nul)
val = val.replace(lepoint,". ");
lavirgule = new RegExp(/(\s*\.\s*)/g);
val = val.replace(lavirgule,", ");
// ou bien on utilise les expressions parenthésées
espace_caractere_espace = new RegExp(/(\s*(\;|\:|\"|\?|!|\(|\)|\[|\])\s*)/g); // \s* un certain nombre d'espaces (éventuellement nul) puis ( un ; ou : ou " ou ? ou ! ou ...) puis un certain nombre d'espaces (éventuellement nul)
val = val.replace(espace_caractere_espace," $1 "); // $1 = lecaractère reconnu
document.getElementById("toto").innerHTML = val;
</script>
</body>
</html>
|
|
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par fabiano13 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 09-05-2008 à 16:44 | 8 messages ]
  Merci beaucoup !
|
|
Services email :
  Vous devez vous identifier pour profiter des services par email du forum.
|

|