2015-08-17 20 views
8

Per il funzionamento di toLocaleString, il browser/JavaScript deve conoscere le impostazioni locali dell'utente e se lo è o meno the specific locale uses "," or "." per un separatore di migliaia. È possibile accedere a questi dati in modo da poter determinare quale sia il separatore delle migliaia?Come determinare il separatore di migliaia in JavaScript

In caso contrario, possiamo usare una funzione come questa ...

var thousandsSeparator = (function(){ 
    if (typeof Number.prototype.toLocaleString === 'function') { 
     var num = 1000; 
     var numStr = num.toLocaleString(); 
     if (numStr.length == 5) { 
      return numStr.substr(1, 1); 
     } 
    } 
    return ","; // fall-back 
})(); 

... ma ci si sente come un mod inutile.

+4

Voi lo chiamate un hack. Lo chiamo elegante :-) –

risposta

4

Un po 'più di scavo e ho trovato Intl.NumberFormat. Penso che questo sia più elegante ...

var thousandsSeparator = (function(){ 
    if (typeof Intl === 'object') { 
     // Gets the formatting object for your locale 
     var numFormat = new Intl.NumberFormat(); 
     // The resolved.pattern will be something like "#,##0.###" 
     return numFormat.resolved.pattern.substr(1,1); 
    } 
    return ","; 
})(); 

O se si ha realmente bisogno ultra-conciso ...

var thousandsSeparator = (Intl) ? (new Intl.NumberFormat()).resolved.pattern.substr(1,1) : ","; 

avviso di compatibilità:

  • L'oggetto può Intl non essere supportato in Safari per qualche ragione - http://caniuse.com/#feat=internationalization - nonostante faccia parte dello standard ECMAScript.
  • Mentre l'oggetto Intl può esistere in alcuni browser standard ECMAScript, il codice sopra funzionerà solo in Chrome.
  • Purtroppo Firefox 40 e IE 11 attualmente non dispongono di una proprietà resolved in numFormat.

una soluzione elegante cross-browser è ancora là fuori ...

+0

Bella scoperta. Non avevo mai sentito parlare di "Intl" prima d'ora. –

Problemi correlati