這裡要講的是一個真的是內行人才知道的問題及解決方法。其實並沒有什麼太大的學問, 但就是要知其所以然, 才能找到解法。
[JavaScript][Regex] 去除煩人的隱藏字元
- 2260
- 0
- JavaScript/jQuery
- 2022-12-23
這裡要講的是一個真的是內行人才知道的問題及解決方法。其實並沒有什麼太大的學問, 但就是要知其所以然, 才能找到解法。
許多人很害怕 Regular Expressions, 除了它的確不好學之外, 主要是因為大家普遍不太了解它能拿來做什麼。所以我在這裡要陸續舉出一些實際上的應用範例, 向讀者們示範 Regular Expression 在實際生活中能幫我們解決什麼問題。依照我的慣例, 當我想到什麼, 就會在原來的文章裡直接修改, 不另做通知, 也不會再寫另一篇新的文章...
我曾在「[Regex] 值得注意的 Regular Expression 樣式的潛在風險」一文中介紹過, Regex 樣式中若含有無意或惡意的某些寫法時, 可能會造成形同 DoS (Denial of Service, 阻斷式攻擊) 的問題, 使得伺服器運算器陷入無窮無盡的空轉運算中。事實上, 在撰寫正規運算式的樣式時, 的確很容易寫出有問題的樣式, 很多時候甚至不是刻意造成的; 愈是初學者, 愈容易造成這個問題...
Regex 本身已經十分複雜, 但不知道大家有沒有想過, 它的解析引擎和處理機制又是如何實作的呢? 一般來講, Regular Expression 的解析引擎可以分為三種, 一種叫做 DFA (Deterministic Finite Automation, 決定性有限自動機制), 另一種叫做 NFA (Nondeterministic Finite Automation, 非決定性有限自動機制), 還有一種叫做 POSIX NFA。.Net 採用了傳統的 NFA 引擎, 使得它既能兼顧速度與功能, 但缺點就是由於傳統 NFA 只接受它找到的第一個相符比對,它也可能讓其它比對無法被找到 (POSIX NFA 雖然可以找到, 但速度緩慢)...
當你可以掌握 Regex 的基本原則之後, 如果你真的把它運用在生活中或工作上, 我相信你很快就會發現那些基本技巧的不足之處。舉個例子, 你可能已經寫好一個樣式 (如 "(?
ASP.NET 的初學者,一旦學到了 Validator 控制項,就會踫到 Regular Expression 這個主題。Regular Expression 指的是一種檢驗文數字的表示式,早在 ASP.NET 出現之前就已存在,而且也不是 ASP.NET 所專有。大多數主流程式語言(包括 Java、PHP 等)都可以透過 Regular Expression 來驗證輸入...