第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

NumberFormatter:在不同區(qū)域設(shè)置中帶有減號(hào)的奇怪行為

NumberFormatter:在不同區(qū)域設(shè)置中帶有減號(hào)的奇怪行為

我遇到了Symfony/Form的問題,它在幕后用于NumberFormatter格式化NumberType字段。我們的項(xiàng)目是多語言的,對于每個(gè)國家,我們使用不同的區(qū)域設(shè)置。$formatter->format()返回負(fù)數(shù)的不同減號(hào)。例如:$formatter = new \NumberFormatter('en', \NumberFormatter::DECIMAL);$value = $formatter->format('-150');var_dump($value); // string(4) "-150"$formatter = new \NumberFormatter('lt', \NumberFormatter::DECIMAL);$value = $formatter->format('-150');var_dump($value); // string(6) "?150" <-- here is the problem正如您所看到的,NumberFormatter減號(hào)更改為其他內(nèi)容。為什么它對我很重要?因?yàn)轫撁嫔嫌行┰厥怯胘avascript生成的,而js無法解析?150number 并返回NaN。有人可以解釋這種行為的原因以及如何從 lt 語言環(huán)境中獲得正確的減號(hào)嗎?NumberFormatter
查看完整描述

3 回答

?
不負(fù)相思意

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊

我找到了解決方案。Symfony/Form有一個(gè)很棒的功能,可以添加視圖轉(zhuǎn)換器,它在渲染表單元素之前渲染。

這是我的FormType

public function buildForm(FormBuilderInterface $builder, array $options)

{

? ? $builder->add('amount', NumberType::class, array(

? ? ? ? 'required' => true,

? ? ? ? 'scale' => 4,

? ? ));


? ? $builder->get('amount')->addViewTransformer(new CallbackTransformer(

? ? ? ? function ($forward) {

? ? ? ? ? ? // Transform the lithuanian minus sign to the normal minus sign.

? ? ? ? ? ? return preg_replace('/\x{2212}/u', '-', $forward);

? ? ? ? },

? ? ? ? function ($reverse) {

? ? ? ? ? ? return $reverse;

? ? ? ? }

? ? ));


? ? // others form elements...

}

這種方法允許覆蓋默認(rèn)的視圖轉(zhuǎn)換器,為其\Symfony\Component\Form\Extension\Core\Type\NumberType添加特定的減號(hào)。


$builder->addViewTransformer(new NumberToLocalizedStringTransformer(

? ? $options['scale'],

? ? $options['grouping'],

? ? $options['rounding_mode'],

? ? $options['html5'] ? 'en' : null

));

需要明確的是,以自定義表單添加的視圖轉(zhuǎn)換器比任何其他合并的轉(zhuǎn)換器具有更高的優(yōu)先級(jí)。


它一般不能解決 的問題NumberFormatter,但可以幫助我解決我的問題。


查看完整回答
反對 回復(fù) 2023-09-22
?
長風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

轉(zhuǎn)換成ascii怎么樣?


$formatter = new \NumberFormatter('lt', \NumberFormatter::DECIMAL);

$value = $formatter->format('-150');

$valueAsAscii = iconv('utf8', 'ascii//translit', $value);


var_dump($value);

var_dump($valueAsAscii);

工作

查看完整回答
?
白衣染霜花

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊

這里真正的問題是,根據(jù)給定的語言環(huán)境,輸出NumberFormatter應(yīng)該是人類可讀的,而不一定可以解析為數(shù)字。


您可以通過覆蓋該符號(hào)來解決此特定問題:


$formatter = new \NumberFormatter('lt', \NumberFormatter::DECIMAL);

$formatter->setSymbol(\NumberFormatter::MINUS_SIGN_SYMBOL, '-');

$value = $formatter->format('-150');

var_dump($value); // string(4) "-150"

但是,請考慮千位分隔符或小數(shù)分隔符,它們也不一定在 JavaScript 中進(jìn)行解析:


$formatter = new \NumberFormatter('lt', \NumberFormatter::DECIMAL);

$formatter->setSymbol(\NumberFormatter::MINUS_SIGN_SYMBOL, '-');

$value = $formatter->format('-150000.5');

var_dump($value); // string(11) "-150 000,5"

您也可以覆蓋這些符號(hào),但這里的要點(diǎn)是,您可能應(yīng)該根據(jù)用戶的區(qū)域設(shè)置有一個(gè)人類可讀的版本,以及一個(gè)由 JavaScript 解析的單獨(dú)的機(jī)器可讀版本。


如果您仍然想用來NumberFormatter輸出機(jī)器可讀的版本,您可以使用'en'區(qū)域設(shè)置,但您仍然需要覆蓋分組分隔符:


$machineFormatter = new \NumberFormatter('en', \NumberFormatter::DECIMAL);

$machineFormatter->setSymbol(\NumberFormatter::GROUPING_SEPARATOR_SYMBOL, '');


查看完整回答
反對 回復(fù) 2023-09-22
  • 3 回答
  • 0 關(guān)注
  • 128 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)