首頁  >  文章  >  web前端  >  如何使用前瞻限制正規表示式中的輸入長度?

如何使用前瞻限制正規表示式中的輸入長度?

Linda Hamilton
Linda Hamilton原創
2024-11-22 16:00:27172瀏覽

How to Restrict Input Length in Regular Expressions Using Lookaheads?

限制正則表達式中的輸入長度

正則表達式提供了一種強大的方法來匹配文本中的模式,並且通常需要限制長度匹配的字元數。雖然這看起來很簡單,但正確應用量詞可能具有挑戰性。在本文中,我們將探討為什麼在模式末尾限制量詞不起作用,並提供使用前瞻的替代方法。

考慮以下正規表示式:

/(a-z|A-Z|0-9)*[^$%^&*;:,<>?()""']*$/

此表達式符合字母、數字和其他字元的序列,但它不限制輸入字串的總長度。要將字元限制為 15 個,我們可以嘗試:

/(a-z|A-Z|0-9)*[^$%^&*;:,<>?()""']*${1,15}/

但是,這會導致錯誤。原因是量詞應用於緊鄰其左側的子模式,而不是整個模式​​。在這種情況下,量詞 {1,15} 適用於第二個字符類,將其長度限制為 1 到 15 個字符,但不是整個字串長度。

相反,限制輸入長度的正確方法是使用錨定在字串開頭的前瞻:

^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$
  • ^ 錨點與字串的開頭匹配字串。
  • 正向先行 (?=.{1,15}$) 檢查字串結尾 ($) 之前是否有 1 到 15 個字元。
  • 剩餘字元類別符合字母、數字和其他允許的字元。

先前瞻可確保整個輸入字串與所需的長度匹配限制。

注意: 前瞻是不消耗任何字元的零寬度斷言。它們僅根據後續模式傳回 true 或 false。

如果輸入可以包含換行符,您可以使用可移植[sS] 字元類別來匹配任何字符,包括換行符:

^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,<>?()""']*$

透過使用前瞻,我們可以有效地限制輸入字串的長度,同時保持所需的模式匹配行為。

以上是如何使用前瞻限制正規表示式中的輸入長度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn