Скрипт найден на просторах интернета и представляет интерес только для обращения к системе голосом
Использование:
$d=$matches[2]; //передаем два или 2
//$d="одна тысяча девятьсот третьем году"; //Тест
//$d="в две тысячи девятьсот тринадцатом году";//Тест
if(!is_numeric($d)){ //проверяем если не число то скармливаем текст скрипту
include_once "php/include/w2dig.php"; //путь к файлу скрипта
$d=strToNum($d); //функция перевода текста в число из подключаемого файла
sayReply("$d,"1);
Сам скрипт w2dig.php:
<?php
function strToNum($s) {
$dict = array(
'ноль'=>0,'нуль'=>0,'нулевой'=>0
,'один'=>1,'два'=>2
,'одна'=>1,'одну'=>1,'первом'=>1,'две'=>2,'втором'=>2,'второй'=>2
,'три'=>3,'третьем'=>3,'третий'=>3,'четыре'=>4,'четвертый'=>4,'четвертом'=>4,'пять'=>5,'пятом'=>5,'пятый'=>5
,'шесть'=>6,'шестом'=>6,'шестой'=>6,'семь'=>7,'семдьмом'=>7,'седьмой'=>7,'восемь'=>8,'восьмом'=>8,'восьмой'=>8,'девять'=>9,'девятом'=>9,'девятым'=>9
,'девятый'=>9,'десять'=>10,'десятом'=>10,'десятый'=>10,'одиннадцать'=>11,'одиннадцатом'=>11,'одиннадцатый'=>11,'двенадцать'=>12,'двенадцатом'=>12
,'двенадцатый'=>12,'тринадцать'=>13,'тринадцатом'=>13,'тринадцатым'=>13,'четырнадцать'=>14,'четырнадцатый'=>14
,'четырнадцатом'=>14,'пятнадцать'=>15,'пятнадцатом'=>15,'пятнадцатый'=>15,'шестнадцать'=>16,'шестнадцатом'=>16,'шестнадцатый'=>16,'семнадцать'=>17
,'семнадцатом'=>17,'семнадцатый'=>17,'восемнадцать'=>18,'восемнадцатом'=>18,'девятнадцать'=>19,'девятнадцатом'=>19,'двадцать'=>20,'двадцатом'=>20
,'двадцатый'=>20,'двадцати'=>20,'тридцать'=>30,'тридцатом'=>30,'тридцатый'=>30,'тридцати'=>30,'сорок'=>40,'сороковой'=>40,'пятьдесят'=>50,'пятидесятый'=>50
,'шестьдесят'=>60,'шестидесятый'=>60,'шестидесятым'=>60,'семьдесят'=>70,'семидесятый'=>70,'семидесятым'=>70,'восемьдесят'=>80,'восьмидесятый'=>80
,'девяносто'=>90,'девяностый'=>90,'сто'=>100,'сотый'=>100,'двести'=>200,'двухсотый'=>200,'триста'=>300,'трехсотый'=>300,'четыреста'=>400,'четырехсотый'=>400
,'пятьсот'=>500,'пятьсотый'=>500,'шестьсот'=>600,'шестисотый'=>600,'семьсот'=>700,'семисотый'=>700,'восемьсот'=>800,'восьмисотый'=>800,'девятьсот'=>900
,'девятисотый'=>900
);
$units = array(
'тысяч' =>1000,
'тысячи' =>1000,
'тысячный' =>1000,
'миллион' =>1000000,
'миллионов' =>1000000,
'миллионный' =>1000000,
'миллиард'=>1000000000,
'миллиардов'=>1000000000,
'миллиардный'=>1000000000,
);
//
$a = explode(' ', trim(preg_replace('/\s{2,}/',' ', $s )));
$io = $i3 = 0;
foreach($a as $k=>$v) {
if (isset($dict[$v])) { // digit
$i3 += (int)$dict[$v];
}
else {
foreach($units as $uk=>$uv) {
if (strpos($v,$uk)!==false) { // unit found!
$io += $i3*$uv;
$i3=0;
break;
}
}//foreach
}
}//foreach
$io += $i3;
return join(' ',str_split($io,7)); // or RETURN $io;
}
Написал второй вариант который работает от обратного. т.е ищет массивом по словам
Теперь должен находить всё. тестируйте
<?php
function strToNum($s) {
$d = array(
'нол'=>0,'нул'=>0,'ровно'=>0
,'один'=>1,'одн'=>1,'перв'=>1
,'дв'=>2,'втор'=>2
,'тр'=>3
,'четыр'=>4,'четверт'=>4
,'пят'=>5
,'шест'=>6
,'сем'=>7,'седь'=>7
,'восем'=>8,'восьм'=>8
,'девят'=>9
,'десят'=>10
,'одиннадц'=>11
,'двенадцат'=>12
,'тринадцат'=>13
,'четырнадцат'=>14
,'пятнадцат'=>15
,'шестнадцат'=>16
,'семнадцат'=>17
,'восемнадцат'=>18
,'девятнадцат'=>19
,'двадцат'=>20
,'тридцат'=>30
,'сорок'=>40
,'пятьдесят'=>50,'пятидесят'=>50
,'шестьдесят'=>60,'шестидесят'=>60
,'семьдесят'=>70,'семидесят'=>70
,'восемьдесят'=>80,'восьмидесят'=>80
,'девяност'=>90
,'сто'=>100,'сот'=>100
,'двест'=>200,'двухсот'=>200
,'трист'=>300,'трехсот'=>300
,'четырест'=>400,'четырехсот'=>400
,'пятьсот'=>500,'пятисот'=>500
,'шестьсот'=>600,'шестисот'=>600
,'семьсот'=>700,'семисот'=>700
,'восемьсот'=>800,'восьмисот'=>800
,'девятьсот'=>900,'девятисот'=>900
);
$units = array(
'тысяч' =>1000,
'миллион' =>1000000,
'миллиард'=>1000000000,
);
$a = explode(' ', trim(preg_replace('/\s{2,}/',' ', $s )));
$io = $i3 = 0;
foreach( $a as $s) {
foreach(array_reverse($d) as $w=>$v ) {
if(preg_match("/^$w/",$s)){
$i3 += (int)$v;
break;
}else {
foreach($units as $uk=>$uv) {
if (strpos($s,$uk)!==false) {
$io += $i3*$uv;
$i3=0;
break;
}
}
}
}
}
$io += $i3;
return join(' ',str_split($io,10));
}
Пример получения числа вторым скриптом
<?php
include_once 'w2dig.php';
$str='двадцать одна тысяча пятьсот семьдесят шесть';
$dig=strToNum($str);
echo "$dig"; \\21576
Люберцы, Россия
На форуме: Sas