逗号分隔字符串不必通过正则表达式拆分..下面的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中,这是不明智的,因为这是安全风险。通过建立允许值的字典,您可以将自己与风险隔离开来。字典可以通过编程方式构建,因此每次查询模式发生变化时都不需要手动更改。