Региональные настройки vba excel

Обновлено: 04.07.2024

на этой странице справки обсуждается, как Visual Basic использует сведения о языке и региональных параметрах для преобразования строк и сравнения.

Использование строк Culture-Specific

Как правило, следует использовать строки, зависящие от языка и региональных параметров, для всех данных, представленных и считываемых пользователями, и использовать строки инвариантных языка и региональных параметров для внутренних данных приложения.

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

Однако если приложение передает дату на центральный сервер, то она должна отформатировать строку в соответствии с одной конкретной культурой, чтобы предотвратить путаницу между потенциально разными форматами даты.

Функции Culture-Sensitive

все функции преобразования строк Visual Basic (за исключением Str Val функций и) используют сведения о языке и региональных параметрах приложения, чтобы гарантировать, что преобразования и сравнения подходят для языка и региональных параметров пользователя приложения.

Ключом к успешному использованию функций преобразования строк в приложениях, работающих на компьютерах с различными параметрами языка и региональных параметров, является понимание того, какие функции используют конкретный параметр языка и региональных параметров, и используется текущий параметр языка и региональных параметров. Обратите внимание, что параметры языка и региональных параметров приложения по умолчанию унаследованы от региональных параметров операционной системы. Дополнительные сведения см. в разделе Asc ,, AscW . Chr ChrW Format Hex Oct и функциях преобразования типов.

Str Функция (преобразует числа в строки) и Val (преобразует строки в числа) не использует сведения о языке и региональных параметрах приложения при преобразовании между строками и числами. Вместо этого они распознают только точку (.) в качестве допустимого десятичного разделителя. Аналогами этих функций, учитывающими культурные особенности, являются:

Преобразования, использующие текущий язык и региональные параметры. CStr Функции и Format преобразуют число в строку, а CDbl CInt функции и преобразуют строку в число.

Преобразования, использующие конкретный язык и региональные параметры. Каждый объект Number имеет ToString(IFormatProvider) метод, который преобразует число в строку и Parse(String, IFormatProvider) метод, который преобразует строку в число. Например, Double тип предоставляет ToString(IFormatProvider) Parse(String, IFormatProvider) методы и.

Дополнительные сведения см. в разделах Str и Val.

Использование определенного языка и региональных параметров

Imagine, что вы разрабатываете приложение, которое отправляет в веб-службу дату (в формате строки). В этом случае приложение должно использовать определенную культуру для преобразования строк. Чтобы проиллюстрировать причину, рассмотрим результат использования ToString() метода даты: Если приложение использует этот метод для форматирования даты 4 июля 2005, то при запуске с использованием языка и региональных параметров США English (EN-US) он возвращает "7/4/2005 12:00:00 AM", но при запуске с использованием немецкого языка (de-de) он возвращает "04.07.2005 00:00:00".

Кроме того, можно получить экземпляр инвариантного языка и региональных параметров из CultureInfo.InvariantCulture Свойства. Инвариантный язык и региональные параметры основаны на английской культуре, но есть некоторые различия. Например, инвариантный язык и региональные параметры задают 24-часовой формат времени вместо 12-часового.

Чтобы преобразовать дату в строку языка и региональных параметров, передайте CultureInfo объект в метод объекта Date ToString(IFormatProvider) . Например, следующий код отображает "07/04/2005 00:00:00", независимо от настроек языка и региональных параметров приложения.

Литералы даты всегда обрабатываются в соответствии с языком и региональными параметрами английского языка.

Сравнение строк

Существуют две важные ситуации, в которых требуется сравнение строк:

Сортировка данных для просмотра пользователю. Используйте операции на основе текущего языка и региональных параметров, чтобы строки были отсортированы соответствующим образом.

Определение точного совпадения двух внутренних строк приложения (обычно в целях безопасности). Используйте операции, которые не учитывают текущий язык и региональные параметры.

оба типа сравнений можно выполнять с помощью StrComp функции Visual Basic. Укажите необязательный Compare аргумент для управления типом сравнения: Text для большинства входных и выходных данных Binary для определения точных совпадений.

StrComp Функция возвращает целое число, указывающее связь между двумя сравниваемыми строками на основе порядка сортировки. Положительное значение для результата указывает, что первая строка больше, чем вторая строка. Отрицательный результат указывает, что первая строка меньше, а нулевое значение указывает на равенство между строками.

2) То ли приложение должно понимать введенные пользователем данные, тогда сопутствуюшщий вопрос - куда введенные? В тектовое поле? В ячейку экселя? пользователь должен вводить всегда с точкой, а если вводит с запятой - выдавать ошибку? В общем поподробней.

Приложение VB база либо MDB либо SQL. Пользователь вводит сумму в обычный TextBox. По нажатию кнопки "Сохранить" работает запрос на добавление

При нажатии кнопки "Изменить соответственно

Тут, как я вижу, ты не формируешь SQL запрос на INSERT, а пишешь в рекордсет. И вот тут данные по типам должны четко соответствовать. То есть в дату пишешь переменную типа Date, в money - Currency и т.п.
Таким образом ты избежишь ошибок с типами.

Значится по пунктам в поле по мере ввода у меня стоит замена запятой на точку, но соответственно результат я получаю текстовый.
Далее переменная lcl_sum32 имеет тип Currency.

соответственно пробовал следующие варианты присвоения суммы рекордсету:

надо чтобы запрос выполнился невзирая на запятую и данные попали в таблицу

Shocker.Pro
2) Пользователь ввел запятую, региональная настройка - точка

При выполнении запроса будет подставлена точка и запрос отработает

Shocker.Pro
3) Пользователь ввел точку, региональная настройка - запятая

надо чтобы запрос выполнился невзирая на запятую и данные попали в таблицу

Shocker.Pro
4) Пользователь ввел точку, региональная настройка - точка

При выполнении запроса будет подставлена точка и запрос отработает

Shocker.Pro
а также варианты с пользователь ввел какую-то херь, в региональных натройках какая-то херь

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

Хм спасибо, работает. вопрос такой среди прочего я строил еще и вот такую конструкцию:

Ну собственно проверку на ввод чисел я взял тут на форуме:

А так же доп проверка по Lost focus это делал я . Скорее всего можно проще но я пока не знаю как :( Эта проверка у меня для всех полей формы

Тогда я не понимаю как отрабатывает конструкция

Допустим в региональных настройках запятая тогда Delimiter получает значение запятая (из системы)

Replace(Text1, ".", Delimiter) - меняем точку на запятую
(Replace(Replace(Text1, ".", Delimiter), ",", Delimiter))- меняем запятую на запятую
CCur(Replace(Replace(Text1, ".", Delimiter), ",", Delimiter)) работает с текущим параметром т.е с запятой.

вот я и не понимаю чем

отличается от lcl_sum32 = CCur(Replace(Text1, ",","."))

Всем нам приходится - кому реже, кому чаще - повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую "рутинную составляющую" - одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.

Макрос - это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.

Способ 1. Создание макросов в редакторе Visual Basic

Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно - редактор программ на VBA, встроенный в Microsoft Excel.

macro1.jpg

  • В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис - Макрос - Редактор Visual Basic(Toos - Macro - Visual Basic Editor).
  • В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer) . Выбираем Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer) . Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic(Visual Basic Editor)

    :

К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:

macro2.jpg

Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:

    Обычные модули - используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert - Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:

macro3.jpg

macro4.jpg

macro5.jpg

Обычный макрос, введенный в стандартный модуль выглядит примерно так:

macro6.jpg

Давайте разберем приведенный выше в качестве примера макрос Zamena:

С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно.

Способ 2. Запись макросов макрорекордером

Макрорекордер - это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается.
  • Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
  • Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.

Чтобы включить запись необходимо:

  • в Excel 2003 и старше - выбрать в меню Сервис - Макрос - Начать запись(Tools - Macro - Record New Macro)
  • в Excel 2007 и новее - нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)

Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:

macro7.jpg

  • Имя макроса - подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
  • Сочетание клавиш - будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис - Макрос - Макросы - Выполнить(Tools - Macro - Macros - Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
  • Сохранить в. - здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
    • Эта книга - макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
    • Новая книга - макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
    • Личная книга макросов - это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.

    После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording) .

    Запуск и редактирование макросов

    Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или - в старых версиях Excel - через меню Сервис - Макрос - Макросы (Tools - Macro - Macros) :

    macro8.jpg

    • Любой выделенный в списке макрос можно запустить кнопкой Выполнить(Run) .
    • Кнопка Параметры(Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
    • Кнопка Изменить(Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

    Создание кнопки для запуска макросов

    Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:

    Кнопка на панели инструментов в Excel 2003 и старше

    Откройте меню Сервис - Настройка (Tools - Customize) и перейдите на вкладку Команды (Commands) . В категории Макросы легко найти веселый желтый "колобок" - Настраиваемую кнопку (Custom button) :

    Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:

    Кнопка на панели быстрого доступа в Excel 2007 и новее

    Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar) :

    macro11.jpg

    Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:

    macro12.jpg

    Кнопка на листе

    Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:

    • В Excel 2003 и старше - откройте панель инструментов Формы через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms)
    • В Excel 2007 и новее - откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)

    Выберите объект Кнопка (Button) :

    macro13.jpg

    Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.

    Создание пользовательских функций на VBA

    Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).

    Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert - Module и введем туда текст нашей функции:

    macro14.jpg

    Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка - Функция) в категории Определенные пользователем (User Defined) :

    macro15.jpg

    После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:

    Я записал макрос для форматирования некоторых данных, содержащих дату (ДД / ММ / ГГГГ). Импортирую, Excel видит как текст. Поэтому я использую записанный мной макрос «text to date» и сохраняю его в подпрограмме VBA.

    Вот записанный макрос:

    Когда я импортирую свои данные, сначала у меня есть это. Вы можете видеть, что он отображается в Excel как ТЕКСТ, потому что он выровнен по левому краю (столбец H, я подтверждаю, что это действительно так):

    enter image description here

    Затем я запускаю макрос и получаю это (столбец H):

    enter image description here

    Вы можете видеть, что Excel видит его как дату, поскольку он выровнен по правому краю. Если я конвертирую его в "число", я вижу соответствующий серийный номер, как и ожидалось. Так что можно подумать, что это нормально. Но на самом деле это не так:

    Если я снова запустил макрос (и я бы это сделал, потому что позже к нему будет добавлено больше данных, поэтому мне нужно убедиться, что вновь импортированные данные внизу также будут правильно отформатированы), я получаю следующее:

    enter image description here

    Таким образом, в основном он изменил формат с ДД / ММ / ГГГГ (который ПРЕДПОЛАГАЕТСЯ) на ММ / ДД / ГГГГ (что неверно). Если я снова запустил этот макрос для этого набора данных, он снова переключится на ДД / ММ / ГГГГ.

    Но ХУДШЕ всего то, что если я ВРУЧНУЮ сделаю то же самое (например, вместо запуска макроса я вручную перейду к «Данные», «Текст в столбцы» и выберу ТОЧНЫЕ те же параметры), то ничего не изменится. Если дата отформатирована как ДД / ММ / ГГГГ, она остается такой, а если она отформатирована как ММ / ДД / ГГГГ (из-за этой дурацкой причуды), то она остается такой же. Я повторяю это достаточно (и даже перезаписываю макрос пару раз), чтобы быть УВЕРЕННЫМ, что делаю то же самое.

    Я знаю, что это из-за региональных настроек, но файл не всегда будет использоваться на моем компьютере, и у меня нет возможности гарантировать, что у конечного пользователя будут какие-либо конкретные региональные настройки. Мне нужно, чтобы этот файл не зависел от региональных настроек.

    МОЙ ВОПРОС: Как я могу убедиться, что эти даты:

    • Отформатирован и распознан как дата в Excel
    • Независимо от локальных региональных настроек пользователей?

    Я знаю, что могу либо перейти на промежуточный этап импорта (и отформатировать данные там, а не в основном файле), либо затем настроить код так, чтобы только недавно импортированные данные применялись к макросу . Но тогда я чувствую, что это не так. надежно, потому что откуда мне знать, что Excel не испортит формат?

    О, потому что макрос немного загадочно смотрит на VBA:

    Я перехожу к Data, Text to Column, выбираю «Delimited» (не имеет значения, потому что я на самом деле не разделяю его на столбцы), затем «Delimiters» по умолчанию (снова не имеет значения Я не разделяю текст в столбцы), затем «Дата» и в раскрывающемся списке «ДГМ» для ДД / ММ / ГГГГ

    РЕДАКТИРОВАТЬ: Пожалуйста, ознакомьтесь с ответом Рона Розенфилда для получения полной информации. Для полноты, вот код, который я буду запускать, чтобы импортировать данные и отформатировать их при импорте, в отличие от импорта и последующего форматирования:

    У меня было впечатление, что IsNumeric(MyString) выявит, если ожидается, если Val(MyString) будет не удастся или нет. Я нашел неожиданные различия в зависимости от региональных настроек.

    Пример 1, Шведские региональные настройки (используемые , в качестве десятичного сепаратора):

    • IsNumeric("1.1") = & gt; Правда
    • Val("1.1") = & gt; 1.1.
    • IsNumeric("1,1") = & gt; Правда
    • Val("1,1") = & gt; 1.

    Пример 2, Эстонские региональные настройки (также используют , в качестве десятичного сепаратора):

    • IsNumeric("1.1") = & gt; ложный
    • Val("1.1") = & gt; 1.1.
    • IsNumeric("1,1") = & gt; Правда
    • Val("1,1") = & gt; 1.

    Мой типичный универсальный код для преобразования в виде строки в число:

    Но это неожиданно не удалось в эстонских региональных условиях. Любая идея, если это предполагаемое поведение? Объяснения Microsoft на том, что проникает, это также немного расплывчато. Что вы предлагаете использовать вместо этого? If Val(MyNumber & "1")<>0 ? Это не удастся для некоторых особых случаев, таких как 0E+0 . Можно также рассмотреть возможность ловить любую ошибку от:

    Я мог бы использовать регулярные выражения, но должны быть лучшие способы.

    Я буду признателен за вклад на это.

    2 ответа

    Проблема использует val Функция которая делает

    возвращает числа, содержащиеся в строке в виде числового значения соответствующего типа.

    Так что это не то, что вы из эксплуатации, потому что он не конвертирует строку в цифры, но extract числа, содержащиеся в строке до первого нечислового символа, который не является пробелом Отказ

    Вернется 1615198 в качестве двойного.

    Итак, что Val интерпретирует как десятичное значение, всегда является . во всех локализациях. Это означает, что он всегда будет COSIDER Val("1.1") в виде номера, но в Val("1,1") запятая является первым неменным символом без пробела, поэтому он останавливается там и возвращает только 1 .

    То, что вы искали, - это CDbl , который фактически преобразуется строка в число, используя десятичный сестератор вашей системы.

    Если вы проверите это с помощью

    В системе, где запятая является десятичным разделителем, он должен возвращать оба раза 1,1 в виде номера.

    Объяснение Почему ваши тесты вернули результаты, которые они вернулись

    Пример 1, Шведские региональные настройки (используемые »,« в качестве десятичного сепаратора):

    • IsNumeric("1.1") = & gt; Правда
      Потому что . считается севертором даты, так что это действительное число
    • Val("1.1") = & gt; 1.1
      Потому что Val всегда рассматривает точку как десятичный разделитель
    • IsNumeric("1,1") = & gt; Правда
      Потому что , считается десятичным значением сепаратором
    • Val("1,1") = & gt; 1. Потому что Val всегда рассматривает запятую как неминый символ

    Пример 2, Эстонские региональные настройки (также используются », как десятичный разделитель):

    • IsNumeric("1.1") = & gt; False
      Потому что точка на эстонском языке не считать дата шаператора это не допустимое число
    • Val("1.1") = & gt; 1.1
      Потому что Val всегда рассматривает точку как десятичный разделитель
    • IsNumeric("1,1") = & gt; Правда
      Потому что , считается десятичным сепаратором
    • Val("1,1") = & gt; 1. Потому что Val всегда рассматривает запятую как неминый символ

    К сожалению, я не знаком с тем, кто обходил те конкретные региональные настройки для работы со встроенной функцией IsNumeric() . Но к счастью, я могу помочь вам создать собственную индивидуальную функцию с помощью регулярных выражений.

    Вы можете использовать функцию ниже. Как только вы добавили его в стандартный модуль кода, просто используйте IsNumber("1.1") вместо IsNumeric("1.1") .

    enter image description here

    Теперь, конечно, если кто-то еще приходит с более прямым подходом, я бы порекомендовал использовать этот метод. Однако это должно работать для вас иначе.

    Давайте сломаем шаблон ^(?:\d+[.,]?\d*|\d*[.,]\d+)$ Real быстро. Этот шаблон имеет оператор или оператор, который является символом | , поэтому мы рассмотрим их отдельно.

    • ^ утверждает, что это запуск вашей строки.
    • (. ) - не захватная группа. Это просто, поэтому нам не нужно добавлять запуск строки ^ и конца строки $ анкеров к каждому из операторов или | .
    • \d+ соответствует любому численному символу \d , один или несколько раз + , затем сразу сопровождается
    • [.,]? - это группа символов, которая будет соответствовать любому символу в этой группе, ZERO или ONE Times ? (делает его необязательным), затем сразу же от
    • \d* , который будет соответствовать любой цифре \d , \d , нулю или * (по существу, делая его необязательно, но может иметь неограниченное внимание символы)
    • И, наконец, у нас есть конец строкового якоря $

    Со всем сказанным, теперь это позволит вам обновить свой код:

    Хотя, если бы это был мой код, я бы проверил числовое значение до отправки на свою функцию преобразования:

    Хотя это на самом деле не имеет большого значения, это делает больше, так как для меня лично.

    Читайте также: