строка — PHP & quot; is_numeric & quot; принимает «E» как число

Я заметил PHP is_numeric() принимает «Е» в качестве числа.
У меня есть строка:88205052E00«и я хочу, чтобы результат был: НЕ числовой.

Вот код, который я тестировал.

<?php

$notnumber = '88205052E00';

if(is_numeric($notnumber)) {
echo $notnumber . ' is a number';
} else {
echo $notnumber . ' is NOT a number';
}

?>

Код выше дает результат:

88205052E00 is a number

Как я могу получить результат: 88205052E00 — это НЕ номер?

3

Решение

Я буду держать ответ, если это поможет, но, как указано, есть недостатки с ctype_digit в том что не нравится - или же .,

Скорее всего, вы захотите использовать ctype_digit, который проверяет, все ли символы в предоставленной строке text являются числовыми.

Где as is_numeric — определяет, является ли переменная числом или числовой строкой

<?php

$s = "88205052E00";

if(ctype_digit($s)){
echo "Yes";
} else {
echo "No";
}

возвращает нет.

2

Другие решения

Просто используйте регулярное выражение:

<?php
if (preg_match("/^\-?[0-9]*\.?[0-9]+\z/", $notnumber)) {
echo "$notnumber is numeric\n";
} else {
echo "$notnumber is not numeric\n";
}

Результаты:

   1234 is numeric
1234E56 is not numeric
-1234 is numeric
.1234 is numeric
-.1234 is numeric
-12.34 is numeric
2

E действителен из-за чисел с плавающей запятой (http://php.net/manual/en/language.types.float.php).

Если вы не хотите разрешать E по какой-либо причине вы можете проверить это самостоятельно:

if (strpos(strtolower($notnumber), 'e') === false && is_numeric($notnumber))

Это гарантирует, что E не существует и что оно также является числовым.

1

Предполагая, что вы хотите убедиться, что строка является допустимым целым числом, вы можете использовать filter_var:

$tests = ['1', '1.1', '1e0', '0x1'];
foreach($tests as $str) {
$int = filter_var($str, FILTER_VALIDATE_INT);
if ($int === false) {
echo $str . ' is not an integer' . PHP_EOL;
} else {
echo $str . ' is an integer' . PHP_EOL;
}
}

Результат:

1 is an integer
1.1 is not an integer
1e0 is not an integer
0x1 is not an integer
1

Давай проверим Определение:

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

Отношения с литералы с плавающей точкой понятно, но как это все относится к целочисленные литералы?

В руководстве не указывается явно, каковы варианты использования, но в целом это скорее вспомогательный инструмент (для обеспечения возможности передачи строковых данных в функции, которые ожидают числовые значения), чем надлежащий валидатор формы. Если вход собирается в среде, где 88205052E00 не ожидается, тогда было бы неплохо ожидать (и генерировать) локализованные данные и реализовывать локально-ориентированное решение.

0
По вопросам рекламы [email protected]