2015-08-27 68 views
2

我想要做的是清理模糊輸入字段。我的模糊代碼功能完全正常,但我無法使正則表達式正常工作。我試圖允許的所有字符除了任何換行符之外都能正常工作。我已經嘗試過包含/ s,/ r和/ n的不同變體和組合。如何忽略/允許多個換行符正則表達式替換正則表達式

我這樣做是因爲我想防止儘可能多的字符不屬於描述性輸入字段。我正在使用實體linq進行數據庫輸入,這應該可以保護我免受sql注入攻擊,但我仍然想要限制字符以提高安全性。我允許撇號,但這應該是下面正則表中列出的允許字符唯一的潛在威脅。

一旦我得到了正則表達式,我也將使用相同的代碼塊替換粘貼。

這是我恢復回來的JavaScript方法。

function CleanSentenceInput(AlphaNumString) { 
    input = AlphaNumString; 
    var CleanInput = input.replace(/[^a-z0-9\s.,;:'()-]/gi, ''); 
    CleanInput = myTrim(CleanInput); 
    return CleanInput; 

} 

有沒有辦法允許任何數量的換行符通過修改此替換正則表達式?

測試輸入:

aaaaaaaaaaaaaaa 
bbbbbbbbbbbbbbbb 

cccccccccccccccc 


cccccccccccccccc 

測試結果:

aaaaaaaaaaaaaaa 
bbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc 

預期結果:

aaaaaaaaaaaaaaa 
bbbbbbbbbbbbbbbb 

cccccccccccccccc 


cccccccccccccccc 

更新**事實證明,我所用的裝飾功能被移除線路中斷。下面是函數:

壞微調功能:

function myTrim(x) { 
    return x.replace(/^\s+|\s+$/gm, ''); 
} 

有沒有辦法解決這個問題的正則表達式,以便它仍然之前和之後的替代空格,而不是裏面的內容?

更新**

良好的微調功能:

function myTrim(x) { 
    return x.replace(/^\s+|\s+$/g, ''); 
} 
+0

它在哪裏?因爲我已經嘗試過了,它仍然會得到完全相同的測試結果。 –

+2

我認爲問題出在'myTrim'上。 [正則表達式不會引起任何問題。](https://regex101.com/r/hG0qZ0/1) –

+0

我將發佈myTrim函數來顯示它的功能,我不認爲它會除去開頭和結束,但我願意嘗試刪除測試。你稍等一會兒。 –

回答

1

當我從一開始的問題是不是與正則指出,因爲

/[^a-z0-9\s.,;:'()-]/gi 

比賽,除空白(文字旁角色類中的其他人)。

MyTrim您需要刪除m,否則,$被視爲末和^開始錨,其實你只希望從它的開頭和結尾修剪字符串:

function myTrim(x) { 
    return x.replace(/^\s+|\s+$/g, ''); 
} 

也可以使用trim()(它受所有現代瀏覽器支持,IE9已經應該支持它)。

+0

給我一秒鐘來測試它,但我相信你是對的。感謝您的快速回復。 –

+1

謝謝,我已經標記爲正確的答案。我從來沒有考慮過我的修剪功能。我想繼續支持IE8至少一段時間。在將來,我很可能會回頭使用trim()。 –