Регулярное выражение не будет преобразовывать вашу строку в число. Я бы посоветовал вам использовать регулярное выражение для проверки поля (убедитесь, что оно соответствует одному из разрешенных вами форматов), а затем просто перебрать строку, отбрасывая все нецифровые и непериодические символы. Если вас не волнует проверка, вы можете пропустить первый шаг. Второй шаг будет по-прежнему разделять его до цифр и периодов.
Кстати, вы не можете безопасно использовать числа с плавающей точкой при расчете валютных значений. Вы потеряете точность и, возможно, в итоге получите итоговые значения, которые не совсем совпадают с входными данными.
Обновление: вот две функции, которые можно использовать для проверки ввода и преобразования его в представление с десятичной точкой.
function validateCurrency($string)
{
return preg_match('/^\$?(\d{1,3})(,\d{3})*(.\d{2})?$/', $string) ||
preg_match('/^\$?\d+(.\d{2})?$/', $string);
}
function makeCurrency($string)
{
$newstring = "";
$array = str_split($string);
foreach($array as $char)
{
if (($char >= '0' && $char <= '9') || $char == '.')
{
$newstring .= $char;
}
}
return $newstring;
}
Первая функция будет соответствовать большинству форматов валют, которые вы можете ожидать "$ 99", "99,999.00" и т. Д. Она не будет соответствовать ".00" или "99.", а также не будет соответствовать большинству номеров в европейском стиле 99.999,00). Используйте это в исходной строке, чтобы убедиться, что это допустимая строка валюты.
Вторая функция просто удалит все, кроме цифр и десятичных знаков. Обратите внимание, что сам по себе он все еще может возвращать недопустимые строки (например, "", "...." и "abc" выходят как "", "...." и ""). Используйте это, чтобы удалить лишние запятые после проверки строки, или, возможно, используйте это само по себе, если вы хотите пропустить проверку.