2010-09-20 7 views
3

Ok, va ici une question de débutant:Pourquoi cette méthode ne fonctionne-t-elle pas pour assigner des caractères, en JavaScript?

//function removes characters and spaces that are not numeric. 

// time = "2010/09/20 16:37:32.37" 
function unformatTime(time) 
{  

    var temp = "xxxxxxxxxxxxxxxx"; 

    temp[0] = time[0]; 
    temp[1] = time[1]; 
    temp[2] = time[2]; 
    temp[3] = time[3]; 
    temp[4] = time[5]; 
    temp[5] = time[6]; 
    temp[6] = time[8]; 
    temp[7] = time[9]; 
    temp[8] = time[11]; 
    temp[9] = time[12]; 
    temp[10] = time[14]; 
    temp[11] = time[15]; 
    temp[12] = time[17]; 
    temp[13] = time[18]; 
    temp[14] = time[20]; 
    temp[15] = time[21]; 


} 

En Firebug je peux voir que les caractères de temps ne sont pas affectés à un emploi temporaire? Dois-je utiliser une fonction replace() pour faire quelque chose comme ça dans JS?

Merci.

+6

Cela me fait pleurer. –

+2

@Stefan Kendall: o allez, j'apprends ... –

+2

@Tommy, je ne pense pas qu'il était * méchant *, juste faire remarquer que c'est une mauvaise approche. Bien que cela semble peut-être un peu dur. Pourtant, même si votre code a provoqué des larmes, vous avez posé une meilleure question (en documentant ce que vous avez déjà essayé) que beaucoup. +1 pour la question et le commentaire. –

Répondre

4

[^\d] est l'expression régulière pour "pas de chiffres".

De façon plus détaillée,

[] représente une « classe », ou un groupe de caractères pour correspondre à.
\d est un raccourci pour 0-9 ou n'importe quel chiffre.
^ dans une classe de caractères annule la classe.

function unformat(t) 
{ 
    return t.replace(/[^\d]/g, ''); 
} 

Vous ne pouvez pas accéder à une chaîne comme celle dans l'un des principaux navigateurs, de toute façon. Vous devez utiliser str.charAt(x).

+1

@Stefan, juste parce que je considère encore regex comme un art sombre, pourriez-vous me parler à travers ce que '/ [^ \ d] /, ''' Est-ce que? O_o Je soupçonne que l'OP, compte tenu de son approche initiale qui vous a fait pleurer, l'apprécierait probablement aussi ... + 1 –

+1

Je l'ai décomposé un peu plus. –

+1

Très apprécié^_^ –

3

Vous devriez certainement utiliser une expression régulière pour cela.

function unformatTime(time) { 
    return time.replace(/[^\d]/g, ''); 
} 

Dans ce cas, il cherche tout ce qui est un non-chiffre et remplace par une chaîne vide. Le «g» à la fin signifie «global», donc il remplacera autant de fois que possible.

  • ^ Cet intérieur du support signifie "non"
  • \d Cela signifie "chiffre"
  • g Cela signifie "global"
+2

Aussi '\ D' signifie" pas de chiffre " – Pointy

+1

Peut-être une question stupide, mais si'^'signifie 'pas' et '\ d' signifie' pas chiffre '... c'est un double négatif? –

+0

@Pointy: Je crois que c'est le "^" qui rend le \ d nié. (Voir d'autres ont aussi des questions comme ça) Checkout http://www.w3schools.com/jsref/jsref_obj_regexp.asp –

Questions connexes