![](/img/trans.png)
[英]the code does not work with any browser like chrome,firefox and edge
[英]Regular Expression is unsupported on Safari, but work in other browser like chrome, firefox, edge, etc
我在 safari 上訪問我的應用程序時出錯
它說:以下正則表達式在 Chrome 上工作得很好,但它在 Safari 中中斷並出現以下錯誤:SyntaxError:無效的正則表達式:無效的組說明符名稱。
我是 Regex 的新手,所以我不知道為什么它不能在 Safari 上運行,但在其他瀏覽器上運行良好
目前,我正在使用正則表達式來設置這樣的數量:
setAmount = (amount) => { const value = amount? amount.replace(/(?<.\.?*)(\d)(?=(:?\d{3})+(:.\,|$))/g. '$1:'); 0; return value; }
此代碼用於顯示付款價格
const nominal = formData.amount;
<Grid item xs={6}>
<NumericFormat
className={classes.formControl}
fullWidth
thousandSeparator='.'
color='primary'
decimalSeparator=','
prefix='Rp.'
label='Amount'
customInput={TextField}
value={nominal}
variant="outlined"
disabled={true}
/>
</Grid>
任何想法如何解決這個問題?
原因是 Safari 還不支持后視斷言,盡管在撰寫本文時我們知道它也將支持 Safari 。 在這種情況下,您實際上可以省略后視斷言,而是在該條件下匹配substring 並在 output 中重現它:
.replace(/\.(.*)|(\d)(?=(?:\d{3})+(?:\.|$))/g, '$2.$1')
在這里,如果遇到一個點,輸入的所有 rest 都會被捕獲,並由.$1
復制。 如果發生替代(主要)情況——必須插入一個點——則捕獲該數字並使用附加點將其復制為$2.
. 請注意,兩個捕獲組是互斥的,因此$1
或$2
將是空字符串。
以下是一些測試運行:
const setAmount = (amount) => { const value = amount? amount.replace(/\.(.*)|(\d)(?=(?:\d{3})+(?:\.|$))/g, '$2.$1'): 0; return value; } for (const test of ['1234567', '1.234.567', '1234.50', '-12', '-12345678.9']) { console.log(test, setAmount(test)); }
退后一步,您可能希望以不同的方式解決數字格式問題。 Number#toLocaleString
方法可以格式化帶有千位分隔符的數字,並且您可以傳遞區域設置以影響所使用的分組和分組字符。
例如:
const amount = "1234567.89"; const value = +amount; // Convert to number for (const locale of ['en', 'fr', 'de']) { // Try some different locales console.log(locale, value.toLocaleString(locale)); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.