Código de ejemplo:
function number_from_spelledout_number($number_string) { $a = new \NumberFormatter('en_US', \NumberFormatter::SPELLOUT); return $a->parse($number_string); } var_dump(number_from_spelledout_number('one')); var_dump(number_from_spelledout_number('two')); var_dump(number_from_spelledout_number('twenty')); var_dump(number_from_spelledout_number('twenty-one')); var_dump(number_from_spelledout_number('twenty one')); var_dump(number_from_spelledout_number('twentyone'));Resultado esperado/deseado:
float(1) float(2) float(20) float(21) float(21) float(21)Salida real:
float(1) float(2) float(20) float(21) float(2001) float(20)Como puede ver, solo entiende específicamente el formato "veintiuno" para significar "21"; tanto "veintiuno" como "veintiuno" lo confunden con los números incorrectos.
Si bien personalmente siempre escribiría "veintiuno", conozco personas: nunca escriben de la forma en que te gustaría que lo hicieran. Evidentemente, escribirán "veintiuno" y "veintiuno" y muchas otras variaciones, y eso suponiendo que tengan la ortografía correcta. No me sorprendería recibir entradas como "twenti too" o "tve enty 2", etc. en "the wild". Y entonces esta cosa se rompe.
¿Es posible (fácilmente) hacer esto más inteligente/sólido/menos estricto de alguna manera?