2015-08-17 24 views
8

Để toLocaleString hoạt động, trình duyệt/JavaScript phải biết ngôn ngữ của người dùng và có hay không the specific locale uses "," or "." cho dấu phân tách hàng nghìn. Có thể truy cập dữ liệu này để chúng tôi có thể xác định dấu phân cách hàng nghìn không?Cách xác định hàng nghìn dấu tách trong JavaScript

Nếu không, chúng ta có thể sử dụng một chức năng như thế này ...

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 
})(); 

... nhưng nó cảm thấy như một hack không cần thiết.

+4

Bạn gọi nó là hack. Tôi gọi nó là thanh lịch :-) –

Trả lời

4

Đào sâu hơn một chút và tôi tìm thấy Intl.NumberFormat. Tôi nghĩ rằng đây là tao nhã hơn ...

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 ","; 
})(); 

Hoặc nếu bạn thực sự cần nó cực kỳ súc tích ...

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

cảnh báo Compatibility:

  • Đối tượng Intl thể không được hỗ trợ trong Safari vì một số lý do - http://caniuse.com/#feat=internationalization - mặc dù nó là một phần của ECMAScript chuẩn.
  • Trong khi đối tượng Intl có thể tồn tại trong một số trình duyệt chuẩn ECMAScript, mã ở trên sẽ chỉ hoạt động trong Chrome.
  • Rất tiếc Firefox 40 và IE 11 hiện không có thuộc tính resolved trong numFormat.

Giải pháp trình duyệt chéo thanh lịch vẫn còn ở đó ...

+0

Tìm tốt. Tôi không nghe nói về 'Intl' trước đây. –

Các vấn đề liên quan