is_numeric или числовой preg_match? - PullRequest
5 голосов
/ 13 января 2009

Я прочитал на форуме, что вы не можете полностью доверять is_numeric (). Он пропускает, например, "0xFF", что является допустимым шестнадцатеричным ...

Так что мой вопрос: вы можете обмануть is_numeric ? Нужно ли мне использовать регулярные выражения, чтобы сделать это правильно?

Ответы [ 5 ]

12 голосов
/ 13 января 2009

Вот что is_numeric () считает числовой строкой:

Числовые строки состоят из необязательного знака, любого количества цифр, необязательной десятичной части и необязательной экспоненциальной части. Таким образом, + 0123.45e6 является допустимым числовым значением. Шестнадцатеричное обозначение (0xFF) также допускается, но только без знака, десятичной и экспоненциальной частей.

Если вы хотите только проверить, состоит ли строка из десятичных цифр 0-9, вы можете использовать ctype_digit () .

2 голосов
/ 13 января 2009

Можно также проверить, используя ctype_digit(), чтобы проверить, является ли это истинным числом.

0 голосов
/ 13 января 2009

Если вы просто хотите проверить, что что-то является целым числом, попробуйте это:

function isInteger($value){
    return (is_numeric($value) ? intval($value) == $value : false);
}

Если вы тоже хотите проверить наличие поплавков, это, очевидно, не сработает:)

0 голосов
/ 13 января 2009

Это для проверки ввода пользователя? Тогда накладные расходы на использование регулярного выражения или утверждение его не содержат «x», а is_numeric () не будет слишком большим.

0 голосов
/ 13 января 2009

Regex, очевидно, был бы вашим лучшим вариантом, однако это связано с накладными расходами. Так что это действительно зависит от вашей ситуации и от того, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...