2010-11-16 9 views
18

i want int de chaîne en javascript comment je peux les obtenir à partircomment analyser la chaîne int en javascript

test1, stsfdf233, fdfk323,

sont quelqu'un me montrer la méthode pour obtenir l'entier de cette chaîne.

C'est une règle que int est toujours à l'arrière de la chaîne.

comment je peux obtenir le int qui était enfin dans ma chaîne

Répondre

51
var s = 'abc123'; 
var number = s.match(/\d+$/); 
number = parseInt(number, 10); 

La première étape est une expression régulière simple - \d+$ correspondra aux chiffres à la fin.
Sur la prochaine étape, nous utilisons parseInt sur la chaîne que nous avons déjà recherchés, pour obtenir un nombre correct.

+0

Cela ne va pas fonctionner. 'number' est un tableau. – jwueller

+1

cela ne fonctionne pas pour les chaînes comme "abcs12s3", "123abc" –

+5

@Chinmayee: "il est une règle que int est toujours à l'arrière de la chaîne" – darioo

2
var str = "stsfdf233"; 
var num = parseInt(str.replace(/\D/g, ''), 10); 
+1

Note: cette solution fonctionne même si les nombres ne sont pas à la fin de la chaîne (aussi pour la chaîne comme ab12c34) –

+1

@fcalderan: Oui, mais presque certainement * pas comme c'est supposé le faire *. (Votre exemple "ab12c34" retournera le nombre 1234. Résultat souhaité? J'en doute.) –

+0

@ T.J. Crowder, c'est la raison de mon commentaire ... –

-2
javascript:alert('stsfdf233'.match(/\d+$/)[0]) 

Global.parseInt avec radix est surpuissant ici, regexp chiffres décimaux extrait déjà et chaîne garnie de rigth

0

Cela pourrait vous aider à

var str = 'abc123'; 
var number = str.match(/\d/g).join(""); 
3

Vous pouvez utiliser un regex pour extraire les numéros dans la chaîne via String#match, et convertir chacun d'eux en un nombre via parseInt:

var str, matches, index, num; 

str = "test123and456"; 
matches = str.match(/\d+/g); 
for (index = 0; index < matches.length; ++index) { 
    num = parseInt(matches[index], 10); 
    display("Digit series #" + index + " converts to " + num); 
} 

Live Example

Si les chiffres se produisent vraiment seulement aux extrémités des chaînes ou vous voulez juste convertir le premier jeu de chiffres que vous trouvez, vous pouvez simplifier un peu:

var str, matches, num; 

str = "test123"; 
matches = str.match(/\d+/); 
if (matches) { 
    num = parseInt(matches[0], 10); 
    display("Found match, converts to: " + num); 
} 
else { 
    display("No digits found"); 
} 

Live example

Si vous voulez ignorer chiffres qui ne sont pas à la fin, ajouter $ à la fin de la regex:

matches = str.match(/\d+$/); 

Live example

+2

C'est '/ \ d + $ /'. Cool 'if', en passant':) ' – Kobi

+0

@Kobi: ** Merci ** pour attraper la chose' $ ', je l'ai attrapé dans l'exemple mais je n'avais pas réalisé que je l'avais tapé dans le texte (je normalement * copie * de l'exemple au texte, pas l'inverse). –

+0

+1 Un 'if (matches)' je suis certain sera un test plus rapide que de s'appuyer sur 'parseInt()' pour le faire pour vous. – user113716

1
var match = "stsfdf233".match(/\d+$/); 
var result = 0; // default value 
if(match != null) { 
    result = parseInt(match[0], 10); 
} 
1

Encore une autre solution, cette fois sans remplacer ou expression régulière, juste une boucle simple:

function ExtractInteger(sValue) 
{ 
    var sDigits = ""; 
    for (var i = sValue.length - 1; i >= 0; i--) 
    { 
     var c = sValue.charAt(i); 
     if (c < "0" || c > "9") 
      break; 
     sDigits = c + sDigits; 
    } 
    return (sDigits.length > 0) ? parseInt(sDigits, 10) : NaN; 
} 

exemple d'utilisation:

var s = "stsfdf233"; 
var n = ExtractInteger(s); 
alert(n); 
+2

Un petit commentaire - vous voulez appeler 'parseInt (sDigits, 10)', essayez 'abc012', puis' abc09'. – Kobi

+0

@Kobi: good catch .. a changé mon poste maintenant. Merci! –

1

Utilisez mon extension à la classe String:

String.prototype.toInt=function(){ 
    return parseInt(this.replace(/\D/g, ''),10); 
} 

Puis:

"ddfdsf121iu".toInt(); 

retourne un entier: 121

0

premier nombre positif ou négatif:

"foo-22bar11".match(/-?\d+/); // -22 
+0

Pouvez-vous expliquer votre réponse? – Rico

+0

c'est faux car il ne répond pas mais ne doit pas être effacé. Il a de la valeur. Il trouve le premier –

+0

OP n'a pas demandé tous les événements, je ne le voulais pas non plus. Et aucune des réponses données ne prend en compte les nombres négatifs et c'est ce dont j'avais besoin, donc j'ai compris cela. – brannigan