正則表達(dá)式不區(qū)分大小寫以及解決思路的探索 .
今天遇見一個(gè)消除js正則表達(dá)式不區(qū)分大小寫的問(wèn)題,網(wǎng)上一搜,發(fā)現(xiàn)自己果然是菜鳥。
在js里面//g,其中g(shù)表示全局匹配,如果沒(méi)有這個(gè),那么就意味著只能匹配一次就會(huì)自動(dòng)結(jié)束;/i/就表示在匹配的過(guò)程中不區(qū)分大小寫。呵呵。。這個(gè)在參數(shù)過(guò)濾的過(guò)程中就很有用了。
dxycode=dxycode.replace(/<br\s*\/?>/gi,'\n')
都說(shuō)到這個(gè)份上了,自然情不自禁的看了一下.NET中的正則表達(dá)式不區(qū)分大小寫的情況。在.NET中,RegexOption枚舉可以使用影響匹配行為的選項(xiàng)修改正則表達(dá)式模式。比如其中的IngoreCase就是匹配過(guò)程中忽略大小寫的限定。附上代碼如下:
Regex.Match (String, String, RegexOptions);
Regex.Replace (String, String, String, RegexOptions)
正則表達(dá)式其實(shí)是一個(gè)很有趣的事情,但是不因正而正則。下面描述一下我今天碰到的問(wèn)題。
大家可能都會(huì)遇到這樣的問(wèn)題,在進(jìn)行ajax的傳輸后,利用javascript綁定數(shù)據(jù)的時(shí)候,經(jīng)常因?yàn)樽⑷霅阂饽_本、html標(biāo)簽未關(guān)閉等問(wèn)題導(dǎo)致頁(yè)面錯(cuò)版和被別人腳本惡意注入。這個(gè)時(shí)候的我們想到的第一個(gè)解決辦法是:將所有標(biāo)簽全部轉(zhuǎn)換成實(shí)體。這樣頁(yè)面既不會(huì)被惡意腳本注入,又不會(huì)出現(xiàn)錯(cuò)版情況。 很好,這是一種解決途徑,畢竟菜鳥開始想問(wèn)題了。但是這樣會(huì)誤殺一篇有用的html標(biāo)簽,比如img,a等等。因此,第一種想法被否定了。
然后菜鳥開始尋找第二種途徑。先將問(wèn)題分解,讓我們先解決惡意腳本注入的問(wèn)題。這個(gè)好辦,把其中一部分惡意的腳本過(guò)濾掉。好啊,這個(gè)簡(jiǎn)單,這個(gè)時(shí)候就用到了我上面說(shuō)的正則表達(dá)式了。一路走下去,惡意腳本注入得到解決。這里先不指出菜鳥這樣做的缺點(diǎn)。先看下一個(gè)問(wèn)題。那么怎樣防止頁(yè)面錯(cuò)版的問(wèn)題呢。哎呀。。。這個(gè)菜鳥可是想破了腦袋,最后的結(jié)論是用正則表達(dá)式吧為關(guān)閉標(biāo)簽給照出來(lái),要么修補(bǔ)未關(guān)閉標(biāo)簽,要不直接刪除未關(guān)閉標(biāo)簽。
再來(lái)評(píng)論菜鳥的第二種解決途徑和第三種方法。這樣做有一個(gè)共同的確定。就是你手動(dòng)改變了用戶的內(nèi)容,不經(jīng)意的用戶還會(huì)以為你系統(tǒng)有問(wèn)題,因?yàn)槿鄙俸芎玫挠脩趔w驗(yàn)。第二,正則表達(dá)式始終是要費(fèi)能的一個(gè)東東,需要不停的比對(duì)。雖然給系統(tǒng)的影響可能不是很大,但是能節(jié)約性能為什么不節(jié)約呢?
最終菜鳥找到了一個(gè)很好的方法,對(duì)于文本框的輸入,采用第一種方法,吧用戶的輸入內(nèi)容直接轉(zhuǎn)換為實(shí)體。當(dāng)然如果用戶有輸入圖片和超鏈接的需要,我們也不能不滿足。如何滿足?解決途徑如下:自定義標(biāo)簽,然后再顯示的時(shí)候自定義標(biāo)簽轉(zhuǎn)換。此時(shí)菜鳥才恍然大悟。
其實(shí)菜鳥也在不斷的進(jìn)步的,這個(gè)問(wèn)題的解決體驗(yàn)了一個(gè)思想就是:特殊問(wèn)題特殊處理的思想。有些東西是不能被大眾化的,那么我們就對(duì)其特殊處理吧!
最后,恭喜菜鳥走出了“因正則而正則”的誤區(qū)。同時(shí)附上正則表達(dá)式大全:
http://www.dbjr.com.cn/tools/zhengze.html
相關(guān)文章
經(jīng)典Javascript正則表達(dá)式[優(yōu)質(zhì)排版]
正則表達(dá)式用于字符串處理,表單驗(yàn)證等場(chǎng)合,實(shí)用高效,但用到時(shí)總是不太把握,以致往往要上網(wǎng)查一番。我將一些常用的表達(dá)式收藏在這里,作備忘之用2013-01-01學(xué)習(xí)正則!超基礎(chǔ)簡(jiǎn)單例子
我一直都覺得正則表達(dá)式只要在要用的時(shí)候翻一下百度就Ok了,然后今天寫php的時(shí)候發(fā)現(xiàn),原來(lái)我正則完全一點(diǎn)都不懂2012-09-09asp.net 正則表達(dá)式[經(jīng)常用的到]
經(jīng)常用的到的一些正則表達(dá)式,正則規(guī)則是這樣寫的,大家可以根據(jù)自己的需要,用各種語(yǔ)言調(diào)用即可2008-11-11正則表達(dá)式匹配閉合HTML標(biāo)簽(支持嵌套)
先確定我們要解決的問(wèn)題——從一段Html文本中找出特定id的標(biāo)簽的innerHTML,需要的朋友可以參考下2020-02-02js正則表達(dá)式之RegExp對(duì)象之compile方法 編譯正則表達(dá)式
該方法可以編譯指定的正則表達(dá)式,編譯之后的正則表達(dá)式執(zhí)行速度將會(huì)提高,如果正則表達(dá)式多次被調(diào)用,那么調(diào)用compile方法可以有效的提高代碼的執(zhí)行速度,如果該正則表達(dá)式只能被使用一次,則不會(huì)有明顯的效果2012-10-10