Как проверить является ли символ числом c
СЗ_Числа = СоздатьОбъект(«СписокЗначений»);
СЗ_Числа.ИзСтрокиСРазделителем(«»»0″»,»»1″»,»»2″»,»»3″»,»»4″»,»»5″»,»»6″»,»»7″»,»»8″»,»»9″»»);
Результат = СЗ_Числа.НайтиЗначение(МойСимвол);
Если Результат = 0 Тогда
Сообщить(«не число»);
Иначе
Сообщить(«Число: «+ Результат-1);
КонецЕсли;
(27) Апдейт к 7й строчке может быть приобретен отдельно. цена вопроса 75 руб.
+(23) Если Число(Символ+1) > 0
В попытке Число — 0 можно попробовать
(30) ышо раз: Попытка лишняя. ЭТО 7-КА
(31) Безполезно. Мозг уже вынесен.
(31) я передумал, согласен с (3)
+(3) Если ПустоеЗначение(Число(Символ)) = 0
(34) вернет 1 для «0», «0.00» и т.п.
Функция ЭтоСтрокаЦифр(Стр) Экспорт
Рез=0;
Если Стр<>«» Тогда
Если (СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Стр,»0″,»»),»1″,»»),»2″,»»),»3″,»»),»4″,»»),»5″,»»),»6″,»»),»7″,»»),»8″,»»),»9″,»»)=»») Тогда
Рез=1;
КонецЕсли;
КонецЕсли;
Возврат Рез;
КонецФункции
(36) нужна проверка на «.» и «-«. «.» должна быть не более одного раза. «-» — только один раз. Наводит на мысль использовать RegExp. Сегодня точно не пятница?
Процедура СкажиМнеПрограммаЯвляетсяЛиМойСимволЧислом(МойСимвол)
Результат = «»;
Если Найти(«0123456789»,МойСимвол) > 0 Тогда
Результат = «Определенно арабское число»;
КонецЕсли;
Если Найти(«MDCLXVI»,МойСимвол) > 0 Тогда
Результат = Результат + ПереносСтроки + «Вполне может являться римским числом»;
КонецЕсли;
Если Найти(«I/XЖ»,МойСимвол) > 0 Тогда
Результат = Результат + ПереносСтроки + «Возможно вы используете чувашские цифры»;
КонецЕсли;
Если Результат = «» Тогда
Результат = «не число нифига»;
КонецЕсли;
Сообщить(Результат);
КонецПроцедуры
Как проверить является ли символ числом c
Стандартная библиотека С++ также предоставляет ряд встроенных функций для работы с символами. В основном они связанны с проверкой символов:
- isupper(c) : проверяет, является ли c заглавной буквой, по умолчанию от «A» до «Z»
- islower(c) : проверяет, является ли c буквой нижнего регистра, по умолчанию от ‘a’ до ‘z’
- isalpha(c) : проверяет, является ли c алфавитным символом
- isdigit(c) : проверяет, является ли c цифрой от ‘0’ до ‘9’
- isxdigit(c) : проверяет, является ли c шестнадцатеричной цифрой, от ‘0’ до ‘9’, от ‘a’ до ‘f’ или от ‘A’ до ‘F’
- isalnum(c) : проверяет, является ли c алфавитно-цифровым символом; аналогично isisalpha(c) || isdigit(c)
- isspace(c) : проверяет, является ли c пробелом (‘ ‘), символом перевода строки (‘\n’), возвратом каретки (‘\r’), перевод страницы (‘\f’), горизонтальная (‘\t’) или вертикальная (‘\v’) табуляция
- isblank(c) : проверяет, является ли c пробелом (‘ ‘) или символом табуляция (‘\t’)
- ispunct(c) : проверяет, является ли c символом пунктуации (один из следующих: _ < >[ ] # ( ) < >% : ; ? * + — / ^ & | ~ ! » brush:cpp;»> #include int main() < unsigned char letter ; if (std::isupper(letter)) std::cout
Данные функции очень часто применяются при обработке строк. Рассмотрим прстейшую задачу — нам надо извлечь из некоторого текста (например, из строки «Phone number: +1(234)456-78-90» ) номер телефона:
#include #include int main() < std::string text ; std::string phone; // строка для хранения номера for(unsigned i<>; i < text.length(); i++) < // проверяем, является ли символ цифрой if(std::isdigit(text[i])) < // добавляем в строку номера телефона phone += text[i]; >> std::cout
Здесь проходим по всем символам текста и, если символ представляет цифру, то заносим его в строку phone. Другая задача — нам надо сравнить две строки вне зависимости от регистра. С одной стороны, мы могли бы использовать простую операцию сравнения ==, которая также может сравнивать строки. Но если мы попытаемся сравнить две строки, в которых хотя бы один символ отличается по регистру, то они будут не равны:
#include #include int main() < std::string word1 ; word1 = "hello"; std::string word2 ; if(word1 == word2) < std::cout else < std::cout >
Результат данной программы:
strings are not equal
Чтобы организовать сравнение без учета регистра, мы могли бы переводить символы в верхний или нижний регистр и сравнивать их:
#include #include int main() < std::string word1 ; std::string word2 ; bool is_equal; // равны ли строки if(word1.length() != word2.length()) < is_equal = false; >else < // сравниваем все символы for(unsigned i<>; i < word1.length(); i++) < // переводим символы в нижний регистр и сравниваем if(std::tolower(word1[i]) != std::tolower(word2[i])) < // если символы не равны, сбрасываем флаг равенства is_equal = false; break; // выходим из цикла >> > if(is_equal) < std::cout else < std::cout >
В данном случае сначала сравниваем длину строк, так как если длины не равны, то сами строки тоже не равны. Далее в цикле проходим по всем символам обоих строк, переводим их в нижний регистр и сравниваем. Если хотя бы одна пара соответствующих символов не равна, то сбрасываем флаг равенства is_equal в false и выходим из цикла, поскольку строки в этом случае будут уже не равны, и дальше нет смысла сравнивать символы. Результат данной программы:
HELLO and hello are equal
ctype_digit
Проверяет, состоит ли переданная строка ( string ) text только из цифровых символов.
Список параметров
Замечание:
Если передано целое число ( int ) в диапазоне между -128 и 255 включительно, то оно будет обработано как ASCII-код одного символа (к отрицательным значениям будет прибавлено 256, чтобы функция могла представить символы из расширенного диапазона ASCII). Остальные целые числа будут обработаны как строки, содержащие десятичные цифры целых чисел.
Внимание
Начиная с PHP 8.1.0 передача нестроковых аргументов устарела. В будущем аргумент вместо ASCII-кода будет интерпретироваться как строка. В зависимости от предполагаемого поведения аргумент либо преобразовывают в строку ( string ), либо вызывают функцию chr() .
Возвращаемые значения
Возвращает true , если каждый символ строки text — — это десятичная цифра, иначе false . При вызове с пустой строкой результатом всегда будет false .
Примеры
Пример #1 Пример использования ctype_digit()
$strings = array( ‘1820.20’ , ‘10002’ , ‘wsl!12’ );
foreach ( $strings as $testcase ) if ( ctype_digit ( $testcase )) echo «Строка $testcase состоит только из цифр.\n» ;
> else echo «Строка $testcase не состоит только из цифр.\n» ;
>
>
?>Результат выполнения приведённого примера:
Строка 1820.20 не состоит только из цифр. Строка 10002 состоит только из цифр. Строка wsl!12 не состоит только из цифр.
Пример #2 Пример использования ctype_digit() со сравнением строк и целых чисел
$numeric_string = ’42’ ;
$integer = 42 ;ctype_digit ( $numeric_string ); // true
ctype_digit ( $integer ); // false (ASCII 42 — это символ *)is_numeric ( $numeric_string ); // true
is_numeric ( $integer ); // true
?>Смотрите также
- ctype_alnum() — Проверяет буквенно-цифровые символы
- ctype_xdigit() — Проверяет шестнадцатеричные цифры
- is_numeric() — Проверяет, содержит ли переменная число или числовую строку
- is_int() — Проверяет, представляет ли собой переменная целое число
- is_string() — Проверяет, представляет ли собой тип переменной строку
- IntlChar::isdigit() — Проверить, является ли символ цифрой
User Contributed Notes 14 notes
11 years ago
All basic PHP functions which i tried returned unexpected results. I would just like to check whether some variable only contains numbers. For example: when i spread my script to the public i cannot require users to only use numbers as string or as integer. For those situation i wrote my own function which handles all inconveniences of other functions and which is not depending on regular expressions. Some people strongly believe that regular functions slow down your script.
The reason to write this function:
1. is_numeric() accepts values like: +0123.45e6 (but you would expect it would not)
2. is_int() does not accept HTML form fields (like: 123) because they are treated as strings (like: «123»).
3. ctype_digit() excepts all numbers to be strings (like: «123») and does not validate real integers (like: 123).
4. Probably some functions would parse a boolean (like: true or false) as 0 or 1 and validate it in that manner.My function only accepts numbers regardless whether they are in string or in integer format.
/**
* Check input for existing only of digits (numbers)
* @author Tim Boormans
* @param $digit
* @return bool
*/
function is_digit ( $digit ) if( is_int ( $digit )) return true ;
> elseif( is_string ( $digit )) return ctype_digit ( $digit );
> else // booleans, floats and others
return false ;
>
>
?>14 years ago
Note that an empty string is also false:
ctype_digit(«») // false
8 years agoPlease note that ctype_digit() will say true for strings such as ‘00001’, which are not technically valid representations of integers, while saying false to strings such as ‘-1’, which are. It’s basically a faster version of the regex /^\d+$/. As the name says, it answers the question «does this string contain only digits» literally. It does not answer «is this a valid representation of an integer». If that’s what you want, use is_int(filter_var($val, FILTER_VALIDATE_INT)) instead.
8 years ago
I just wanted to clarify a flaw in the function is_digit() suggested by «info at directwebsolutions dot nl » ..
It returns true in case of negative integers and false in case of strings that contain negative integers .
example:
is_digit(-10); // returns ture
is_digit(‘-10’); // returns false10 years ago
Interesting to note that you must pass a STRING to this function, other values won’t be typecasted (I figured it would even though above explicitly says string $text).
$val = 42 ; //Answer to life
$x = ctype_digit ( $val );
?>Will return false, even though, when typecasted to string, it would be true.
$val = ’42’ ;
$x = ctype_digit ( $val );
?>Returns True.
Could do this too:
$val = 42 ;
$x = ctype_digit ((string) $val );
?>Which will also return true, as it should.
14 years ago
ctype_digit() will treat all passed integers below 256 as character-codes. It returns true for 48 through 57 (ASCII ‘0’-‘9’) and false for the rest.
ctype_digit(5) -> false
ctype_digit(48) -> true
ctype_digit(255) -> false
ctype_digit(256) -> true(Note: the PHP type must be an int; if you pass strings it works as expected)
Char. Is Digit Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Показывает, относится ли символ Юникода к категории десятичных цифр.
Перегрузки
Показывает, относится ли указанный символ Юникода к категории десятичных цифр.
Показывает, относится ли указанный символ Юникода в указанной позиции в указанной строке к категории десятичных цифр.
Примеры
В следующем примере кода демонстрируется IsDigit.
using namespace System; int main() < char ch = '8'; Console::WriteLine( Char::IsDigit( ch ) ); // Output: "True" Console::WriteLine( Char::IsDigit( "sample string", 7 ) ); // Output: "False" >using System; public class IsDigitSample < public static void Main() < char ch = '8'; Console.WriteLine(Char.IsDigit(ch)); // Output: "True" Console.WriteLine(Char.IsDigit("sample string", 7)); // Output: "False" >>open System let ch = '8' printfn $"" // Output: "True" printfn $"""""" // Output: "False" Module IsDigitSample Sub Main() Dim ch8 As Char ch8 = "8"c Console.WriteLine(Char.IsDigit(ch8)) ' Output: "True" Console.WriteLine(Char.IsDigit("sample string", 6)) ' Output: "False" End Sub End ModuleКомментарии
Допустимые цифры являются членами UnicodeCategory.DecimalDigitNumber категории.
IsDigit(Char)
Показывает, относится ли указанный символ Юникода к категории десятичных цифр.
public: static bool IsDigit(char c);public static bool IsDigit (char c);static member IsDigit : char -> boolPublic Shared Function IsDigit (c As Char) As BooleanПараметры
Знак Юникода, который необходимо вычислить.
Возвращаемое значение
Значение true , если c является десятичной цифрой; в противном случае — значение false .
Комментарии
Этот метод определяет, является ли Char элемент числом радикс-10. Это контрастирует с IsNumberпараметром , который определяет, относится ли к Char какой-либо числовой категории Юникода. Числа включают такие символы, как дроби, подстрочные знаки, надстрочные символы, римские цифры, денежные числовые знаки, окруженные числа и цифры, относящиеся к скрипту.
Допустимые цифры являются членами UnicodeCategory.DecimalDigitNumber категории.
См. также раздел
Применяется к
IsDigit(String, Int32)
Показывает, относится ли указанный символ Юникода в указанной позиции в указанной строке к категории десятичных цифр.
public: static bool IsDigit(System::String ^ s, int index);public static bool IsDigit (string s, int index);static member IsDigit : string * int -> boolPublic Shared Function IsDigit (s As String, index As Integer) As BooleanПараметры
Позиция символа, который необходимо вычислить в s .
Возвращаемое значение
true , если символ в позиции index в s является десятичной цифрой; в противном случае — false .
Исключения
s имеет значение null .
Параметр index имеет значение меньше нуля или больше последней позиции в s .
Комментарии
Этот метод определяет, является ли Char элемент числом радикс-10. Это контрастирует с IsNumberпараметром , который определяет, относится ли к Char какой-либо числовой категории Юникода. Числа включают такие символы, как дроби, подстрочные знаки, надстрочные символы, римские цифры, денежные числовые знаки, окруженные числа и цифры, относящиеся к скрипту.
Позиции символов в строке индексируются, начиная с нуля.
Допустимые цифры являются членами UnicodeCategory.DecimalDigitNumber категории.