簡體   English   中英

HTML正則表達式模式:[\\ d \\ s-] {3}有效,但[\\ d- \\ s] {3}無效。 為什么?

[英]Html regex pattern: [\d\s-]{3} works but [\d-\s]{3} doesn't. Why?

Codepen示例:
https://codepen.io/Trost/pen/KXBRbY
嘗試在兩個字段中都放入1個符號。
我不明白怎么了。 如果我在https://regex101.com中測試這些正則表達式,它們似乎是相同的。

<form>
  Works: <input type="text" name="country_code" pattern="[\d\s-]{3}" title="-23" required>
  <input type="submit">
</form>
<form>
  Bug: <input type="text" name="country_code" pattern="[\d-\s]{3}" title="- 3" required>
  <input type="submit">
</form>

您定義了兩個不同的東西:

  • [az]是范圍的定義-從az所有字符。
  • [az-]是一組三個要素的定義- az-

真正的根本原因是在pattern HTML5屬性中使用了正則表達式[\\d-\\s] ,並且在最新版本的Chrome和FireFox中,使用u修飾符將其編譯為與ES2015兼容的正則表達式。 結果是Unicode正則表達式模式有更嚴格的轉義規則

在此處輸入圖片說明

這意味着每當無法明確解析char時,這就是一個錯誤。 當一個字符被轉義但不需要轉義時,它又是一個錯誤。

在基於u的正則表達式中的字符類中可能會逸出的字符是+$^*()| \\[]. ? -{} (請參見此 )。 如果-位於字符類的開頭/結尾,則它仍可以不轉義,因為它只能在此處解析為文字連字符。

在兩個速記字符類之間,未轉義的-將產生錯誤,因為它被視為用戶錯誤。

因此,可以在開始/結尾處放置一個連字符(始終是最佳選擇),或者在字符類內部將其轉義(並且永遠不要在字符類外部進行轉義)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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