2010-08-02 6 views
1

Comment puis-je remplacer ce caractère | en JavaScript?Remplacer une chaîne en JavaScript et PHP

<html> 
<body> 

<script type="text/javascript"> 

var str="data|data|data"; 
document.write(str.replace(/|/g,"<br />")); 

</script> 

Dans la sortie de code donné, chaque personnage a le "< br />"

Je ne sais pas quel est le problème avec mon code .. :)

En outre, pour PHP, je veux la fonction à utiliser si l'entrée est

|string|| 

et la sortie doit être

string 

uniquement. Je veux seulement que la partie externe de la chaîne en PHP soit substituée: ||hel||lo|| deviendrait hel||lo.

Pourrais-je utiliser trim()? Je pense que trim() ne s'applique qu'aux espaces blancs.

+1

Vous devriez poser 2 questions distinctes (en particulier dans différentes langues) ainsi que 2 questions distinctes. –

+0

Appuyé - d'après vos commentaires ci-dessous, la question PHP semble être légèrement différente de celle de JS, mais ce n'était pas évident à partir de la question. Je dirais que ces deux sont assez différents pour être affichés comme deux questions différentes. – Piskvor

Répondre

3

JavaScript:

Vous devez échapper au symbole pipe:

document.write(str.replace(/\|/g,"<br />")); 
//      ---^ 

PHP:

Vous pouvez passer un autre paramètre à trim() qui spécifie les caractères à supprimer:

$str = trim($str, '| '); 

Si vous souhaitez également supprimer le caractère au milieu de la chaîne, vous pouvez utiliser str_replace():

$str = str_replace('|', '', $str); 
1

En Javascript, vous aurez besoin d'échapper à ce caractère pipe:

alert("data|data|data".replace(/\|/g,"<br />")) 
4

Vous n'avez pas besoin d'une expression régulière pour cela - si vous passez une chaîne comme premier argument à replace(), il sera être remplacé littéralement:

var str='data|data|data'; 
str = str.replace('|', ''); 

... mais il ne remplacera le premier match. Pour un remplacement global, vous devez spécifier le drapeau global:

var str='data|data|data'; 
var re = new RegExp('\|','g'); // G is the 'global' flag 
str = str.replace(re,''); 

En PHP, str_replace() fonctionne avec des chaînes littérales:

$str='data|data|data'; 
$str = str_replace('|', '', $str); 
// $str == datadatadata 

Si vous voulez seulement supprimer les délimiteurs externes, utilisez trim():

$str='|||data|data||data|'; 
$str = trim($str,'|'); 
// $str == 'data|data||data'; 
+0

Ce n'est pas correct. En JavaScript, il ne remplacera que la première occurrence de '|', vous * devez * utiliser des expressions régulières ici. –

+0

Je veux seulement que la partie externe de la chaîne en php soit substituée .. comme "|| hel || lo ||" et la sortie serait "hel || lo" –

+0

@vrynxzent: Vous pouvez utiliser 'trim()' pour cela, voir ma réponse. –

2

vous devez échapper à | caractère car il est utilisé comme OR dans regex/a | b/correspond à un OU b. Try/\ |/

Edit: Pour atteindre Wour dernier but essayer de le faire de cette façon (beaucoup de regex, je sais):

document.write(str.replace(/(\|)+$/g,"").replace(/^(\|)+/g,"").replace(/(\|)+/g,"<br />")); 
+0

merci pour les réponses .. :) que diriez-vous pour le php? –

Questions connexes