簡體   English   中英

Safari 不支持正則表達式,但可以在其他瀏覽器(如 chrome、firefox、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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM