逗號分隔字符串不必通過正則表達式拆分..下面的C#將做到這一點,例如:
string sort = Request["sortBy"];
if(sort != null){
foreach(string s in sort.Split(',')){
string direction = "DESC";
if(s[0] == '-')
direction = "ASC";
if(permittedColumnsList.Contains(s.Replace("-", ""))
sql = sql + s.Replace("-", "") + " " + direction + ",";
}
sql = sql.Remove(sql.Length - 1); // drop last comma
這仍然是分析和尋找第一個破折號不過,你似乎不想要的東西。
如果你準備好所有允許的排序OPS存儲在它變得更簡單找一本字典:
//column dictionary mapping acceptable parameters to the sql that
//implements them
colDict["-id"]="id ASC,";
colDict["id"]="id DESC,";
colDict["-name"]="name ASC,";
colDict["name"]="name DESC,";
string sort = Request["sortBy"];
if(sort != null){
foreach(string s in sort.Split(',')){
if(colDict.ContainsKey(s))
sql = sql + colDict[s];
}
sql = sql.Remove(sql.Length - 1); // drop last comma
我認爲僅此而已,你應該在尋找簡化的東西去那裏的。盲目地接受用戶輸入到URL中的內容並不明智,並且如果他們把 - (我一直期待 - 是DESC)放在帶有ASC後綴的sql中,這是不明智的,因爲這是安全風險。通過建立允許值的字典,您可以將自己與風險隔離開來。字典可以通過編程方式構建,因此每次查詢模式發生變化時都不需要手動更改。