Tester si une chaîne ne contient que des chiffres ?

Eléphant du PHP | 172 Messages

26 mai 2005, 23:40

Salut à tous,

J'ai écrit cette fonction afin de tester si une chaîne de caractères ne contient que des chiffres:
function isnum($valeur)
{
	var checkOK = "0123456789";
	var allValid = true;
	var decPoints = 0;
	var allNum = "";

	for ( i = 0 ;  i < $valeur.length ;  i++ ) 
	{
		ch = $valeur.charAt(i);
		for ( j = 0 ;  j < checkOK.length ;  j++ ) 
			if ( ch == checkOK.charAt(j) ) 
				break;
			if ( j == checkOK.length ) 
			{
				allValid = false;
				break;
			}
		    allNum += ch;
		}
	if ( !allValid ) 
	{
		alert("Ne tapez que des chiffres dans les champs !");
		return (false);
	}
}
Je suis certain qu'il y a beaucoup plus court, si vous avez une idée, je suis preneur. :wink:

.

Mammouth du PHP | 19672 Messages

26 mai 2005, 23:44

ouais, la fonction isNaN() : pour "is Not a Number" : voir ICI vers le bas de la page
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

26 mai 2005, 23:50

Salut Cyrano,

Et merci, j'y avais pensé, mais je ne cherche pas à déterminer si c'est un nombre ou non.

Je cherche à savoir si une chaîne ne contient que des chiffres

C'est très différent, 10.5 est un nombre mais il n'est pas composé que de chiffres. (il contient le caractère ".")
Donc ma fonction doit retourner FALSE ...

As-tu une autre idée ?

Mammouth du PHP | 19672 Messages

27 mai 2005, 00:02

Peut-être une combinaison de isNan() et parseInt(), quelque chose du genre

Code : Tout sélectionner

function chiffresSeulement(nombre) { if(!isNaN(nombre)) { if(parseFloat(nombre) != nombre) { return false; } else { return true; } } else { return false; } }
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

27 mai 2005, 00:10

Merci Cyrano,

Mais je pensais à quelquechose de beaucoup plus court.

Un truc comme isNaN()

Ma fonction isnum() marche très bien, mais je trouve que c'est une usine à gaz pour règler un problème aussi simple.

Mammouth du PHP | 19672 Messages

27 mai 2005, 00:13

Je ne suis pas un spécialiste en JavaScript, c'est pour l'instant la meilleure idée que j'aie pu trouver ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 mai 2005, 11:13

À part vérifier que ta valeur est numérique, puis entière, je ne vois pas d'autre solution.
(et encore, utilises-tu les espaces comme séparateurs de milliers ?...)

Sinon les regexp...

Eléphant du PHP | 172 Messages

27 mai 2005, 19:28

utilises-tu les espaces comme séparateurs de milliers ?...

Sinon les regexp...
Salut albat,

Le chaînes que j'utilisent ne sont pas des nombres, il n'y a a donc pas de séparateur de milliers, ni de virgule, juste les chiffres de 0 à 9.

Par contre il est important de tester que la chaîne n'est bien composée que de chiffres.

Ces chaînes sont utilisées par le système UCC/EAN 128.

Tu parles de "regexp", qu'est-ce ?

Et merci de t'interesser à mon problème.

.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

27 mai 2005, 22:07

Les expressions régulières sont... coment dire ?... des modèles de format pour des chaînes de caractères.

On les utilise souvent par exemple pour vérifier la validité d'une adresse e-mail saisie par l'utilisateur :
la chaîne contient-elle le caractère @ ? Y a-t-il un suffixe d'au moins 2 caractères ?...

Ripat a d'ailleurs rédigé un tuto sur ce sujet. ;)
Que son nom soit vénéré par les générations futures... :agenouille:

Eléphant du PHP | 172 Messages

27 mai 2005, 23:01

Les expressions régulières sont... coment dire ?... des modèles de format pour des chaînes de caractères.
Merci, à toi et pour le tuto de Ripat.

Mais si j'ai bien compris, ça ne concerne que PHP ?

Y-a-t-il un équivalent Javascript aux expressions régulières de PHP ?

:?:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

28 mai 2005, 00:13

Tu peux créer une fonction JS qui analyse chaque caractère de ta chaîne et vérfie pour chacun s'il est un chiffre.