2012-12-18 88 views
0

我正在尋找(管理員)用戶輸入一些模式匹配字符串,以給不同的用戶我的網站訪問不同的數據庫行,這取決於是否在特定字段中的文本該行將匹配該用戶的模式匹配字符串。驗證正則表達式輸入,最好使用正則表達式

我決定使用正則表達式,因爲直接集成到MySQL語句是微不足道的。

我真的不知道從哪裏開始驗證字符串是一個有效的正則表達式,使用正則表達式。

我做了一些搜索類似的問題,看不到一個。谷歌製作了comical answer,遺憾的是沒有那麼有用。

難道人們在野外這樣做還是避免它?

它可以用一個簡單的正則表達式來完成,還是所有有效的正則表達式的集合都需要被限制爲一個可用的子集?

+1

您使用哪種語言? –

+0

@littlestewie我正在使用php,但是我想將它全部保存在MySQL查詢中,這樣我就不必通過php中的行進行篩選,找到正確的匹配項。 – Bingo

回答

2

驗證正則表達式是一項令人難以置信的複雜任務。一個正則表達式將無法做到這一點。

一個簡單的方法是捕獲您嘗試運行SQL語句時發生的任何錯誤,然後向用戶報告適當的錯誤。

我假設'管理員'是一個值得信賴的用戶在這裏。給不信任的用戶輸入正則表達式是非常危險的,因爲用一個正則表達式構造的執行正則表達式很容易攻擊你的系統。那就是在你開始擔心Bobby Tables問題之前。

+0

是的,管理員信任..但我仍然覺得很髒,沒有正確驗證我的投入。我使用準備好的語句來防止鮑比表,我想我更擔心XXS,當我從數據庫中顯示正則表達式時,管理員可以編輯它。 – Bingo

+0

@Bingo,你可以使用正則表達式來執行一個簡單的僞選擇語句,然後檢查錯誤,看看正則表達式是否有效。 – dan1111

2

在javascript:

input = "hello**"; 

try{ 
     RegExp(input); 
     // sumbit the regex 
}catch(err){ 
     // regex is not valid 
} 
-1

不能驗證字符串包含使用正則表達式一個有效的正則表達式。但你可能會妥協。

如果你只需要知道,僅是在正則表達式是有效的字符串中使用的字符,你可以使用正則表達式:

^[\d\w \-\}\{\)\(\+\*\?\|\.\$\^\[\]\\]*$ 

這可能會根據不同的應用是足夠的。

+1

這不是真的。正則表達式基本上可以包含任何字符。無論什麼不是元字符都將被視爲匹配該字面字符。 – dan1111