11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je suis confronté à un problème assez énervant.

Une variable alphanumérique issue d'un formulaire html.

var chose = 'ERT528';

// je manipule la chose par des méthodes de chaine, par exemple :

var chose_deux = chose.replace ('8', '').slice (-1);

// je récupère 2, normal

Number.isInteger (chose_deux)
// retourne false comme si c'était une chaine !

// Pour m'en sortir
var chose_trois = chose_deux * chose_deux;

Number.isInteger (chose_trois)
// retourne true, merci


D'accord avec le comportement de Number.isInteger ?
Voyez-vous une méthode plus élégante que la multiplication pour que 2 soit un chiffre ?

Merci d'avance.
Modifié par boteha_2 (08 Nov 2020 - 17:08)
Modérateur
Bonjour,

Pour transformer une chaine en un nombre entier, on utilise la fonction parseInt().

Ici, on peut donc faire ça :
var chose_deux = parseInt(chose.replace ('8', '').slice (-1));

Amicalement,
Modérateur
Attention, il est préférable de notifier le type de base dans la fonction parseInt afin d'éviter des bugs par la suite.

Quel est l'intérêt de remplacer 8 par rien et faire un slice ? autant faire un slice directement
Modifié par niuxe (08 Nov 2020 - 18:56)
Bonjour,

Merci de vos réponses.

var chose = 'ERT528';

var nombre = 28;

var chose_deux = chose.replace (nombre, '').slice (-1);


Je ne peux pas utiliser substr car je ne connais ni la longueur de la chaine de caractères ni celle du nombre.

Par contre je sais que chose est toujours une chaine de caractères suivie d'un nombre compris entre 1 et 3000.

C'est pourquoi je commence par effacer le nombre et ensuite je regarde s'il reste un chiffre.

Il me semble que cela couvre tous les cas :

'ERT528'
'ERT287'
Il faut juste penser à ne faire qu'un seul remplacement afin d'éviter que 2828 soit assimilé à 28.

La documentation de replace est peu claire à ce sujet mais je suppose que 2828 sera remplacé par '' et que cette méthode ne permet pas de paramétrer le nombre de remplacements voulus, en l’occurrence un seul.
Il faut donc sans doute chercher autre chose.

parseInt('ERT')
Je vais essayer, je suppose que cela retourne 0 et j'espère que 0 n'est pas considéré comme un nombre entier.
Bonjour,

Selon un petit essai dans ce codepen.

1) Replace () s'arrête à la première occurrence trouvée.

2) parseInt () fonctionne comme attendu.
Modérateur
Bonjour,

Et c'est quoi exactement ce que tu veux extraire ? Parce jusqu'à présent, on comprend que tu veux ne garder qu'une partie du nombre, mais on ne sait pas laquelle.

Amicalement,
Bonjour parsimonhi,

Merci de ton suivi.

En fait mon problème est résolu, sous réserve d'un test sur IE.

J'ai complété le codepen avec un autre exemple.

L'important est que replace () ne remplace qu'une seule occurrence, ce n'était pas clair dans les documentations que j'ai consultées.

PS : j'ai paramétré base 10 dans parseInt (), merci de l'avertissement.
Modifié par boteha_2 (12 Nov 2020 - 20:05)
Bonjour,

Je ne suis pas sûr que cela fonctionne sous IE mais je coche Résolu pour le reste du monde.