Vérifier si une chaîne contient un entier
Connaissez-vous une fonction qui permet de vérifier si une chaîne contient un nombre entier?
Voici comment je l'avais espérer qu'il fonctionne:
holds_int("23") //should return true.
holds_int("2.3") //should return false.
holds_int("qwe") //should return false.
- (connexe) Vérifier si la chaîne est un timestamp unix - le test est fondamentalement la même
- Pourquoi avez-vous besoin?
- J'ai besoin de valider la saisie de l'utilisateur.
- Et quelle entrée est considéré comme valide?
- Considérez-vous '1.0', '0xFF" ou "0123' (octal) que les nombres entiers pour le test et si vous passez un entier au lieu d'une chaîne de caractères?
- Tout nombre naturel serait considéré comme valide d'entrée dans le cas où je suis en train de travailler sur.
- considérez-vous que les nombres naturels à s'étendre au-delà de PHP entier de bits de large? E. g. ne 2147483648 à se qualifier?
- Tout nombre naturel ou tout nombre naturel qui peut être représenté par PHP du type de données entier?
- Je suppose que c'est un nombre naturel quelconque qui peut être représenté par PHP du type de données entier.
- cela existe déjà en php sa php.net/is_numeric
Vous devez vous connecter pour publier un commentaire.
Exemple de résultats:
Voir Gordon réponse ci-dessous pour savoir comment cela allait se comporter différemment si
===
ont été utilisés pour la comparaison, au lieu de==
.===
et assurez-vous que le nombre est à l'intérieur de l'intervalle entier===
ou==
comparaison. Il y a des cas limites, par exemple, '1.0', hex et octals.(string)(int)$var === (string)$var
, pour éliminer ce que je vois comme un faux positif dans votre liste,1.0
.var_dump( test('2147483648') ); // false var_dump( test('-2147483649') ); // false
les deux de retour de vrai, de faux pas.Pas la méthode la plus rapide, mais
filter_var()
est tout à fait exacte:Voici les résultats sur la base Jhong de réponse, des différences marquées avec
!!
:Pour permettre octal entiers:
Résultats:
Pour permettre la notation hexadécimale:
Résultats:
Ne veux pas accidentellement tour Jhong de réponse dans un CW, donc pour l'enregistrement voici les résultats lors des tests avec
===
au lieu de==
.==
reviendra également vrai pour les hex0xFF
et notation scientifique-1.3e3
(par exemple lorsqu'il n'est pas utilisé comme une chaîne de caractères, false si elle est utilisée comme une chaîne de caractères)Désolé si cette question a été répondu, mais cela a fonctionné pour moi dans le passé:
D'abord vérifier si la chaîne
is_numeric
. si c'est ajouter un0
de la valeur pour obtenir PHP pour convertir la chaîne de son type. Ensuite, vous pouvez vérifier si c'est un int avecis_int
. Rapide et sale, mais cela fonctionne pour moi...Résultats:
Le seul problème est qu'il permettra d'évaluer les valeurs octales enveloppé dans une chaîne littérale, je.e: '0123' va tout simplement devenir 123. Mais c'est facile à répondre 🙂
foo
, j'ai le erreur PHP:A non-numeric value encountered
. Je suis à l'aide dePHP 7.1.3
. Une réponse liée à cette. Et Ils des conseils à ne pas utiliser is_int() iciAutre option
12-34
. Vous devez utiliser/^-?[0-9]+$/
. Si vous souhaitez refuser les zéros non significatifs (qui doit) utiliser/^-?[1-9][0-9]*$/
.Si la chaîne contient des espaces, puis @Jack la réponse ne sera pas fournir des résultats exacts.
par exemple,
Au-dessus de la chaîne ne sera pas un int en fonction de la vérification ci-dessus.
Ainsi, au lieu de l'aide de cela, essayez suivantes:
true
pour"19 "
; vous devez être confondu avec Jhong de réponse.ctype_digit
fera l'affaire:ctype_digit($str)
$str
doit être une chaîne de caractères.
Peut-être cela va aussi aider dans une situation donnée
il y a une fonction en php qui fait déjà cela, elle s'appelle "is_numeric()"
il va retourner true ou false accordenly..
lien: http://www.php.net/is_numeric
vous avez dit "holdsint("2") doit retourner true, bien is_numeric("2") renvoie la valeur True, et is_numeric("un") Faux, comme prévu, cette fonction existe en php, pas besoin de les réécrire.
is_numeric()
retournetrue
pour des flotteurs.comparison.php:
Test:
Il peut y avoir deux cas-
Vous devez vérifier exacte de la chaîne de format d'un nombre(plus de ans est sur celui-ci)
Vous voulez vérifier, si une chaîne contient un nombre spécifique ou non
preg_match('/'.$matching_number.'/',$container_string);
J'ai aimé nyson de la suggestion, mais il a remarqué qu'elle sera fausse pour "0123'.
Je suis en train de faire ceci:
(Cela aurait été posté un commentaire @nyson, mais je n'ai pas les droits suffisants pour le faire encore).
Édité pour ajouter:
Si vous voulez zéro pour être vrai, vous avez besoin de faire quelque chose comme
J'ai été en utilisant ce depuis longtemps.
Si vous souhaitez afin de déceler d'éventuelles int évalués chose, y compris 1.0 "1.0" 1e3 "007", puis vous mieux laisser is_numeric faire son travail afin de détecter tout objet PHP qui représente un nombre, et ensuite seulement de vérifier si ce nombre est un entier (int).
ou en court
Note que bien que PHP
is_int()
vérifie si le type de variable est un entier, au contraire, les autres types de fonction PHPis_numeric()
détermine très précisément si le contenu de la variable (c'est à dire la chaîne de caractères) peut représenter un nombre.Si vous utilisez Affirmer bibliothèque dans votre projet ( https://github.com/beberlei/assert ), vous pouvez facilement le faire en une seule ligne:
Remarque: il lève une exception en cas de violation de cette affirmation.
is_int
est le seul ce qu'il doit faire ce travail.is_int
détermine si le type de la variable est un entier, pas le valeur.