修剪字符串内容以仅获取ID值

时间:2014-11-05 16:22:02

标签: c# string replace

我试图弄清楚如何修剪一个字符串,这样我就得到了ID int值。我有一个文本框可以接受ID值,只要它们的格式类似[@ ID =#] 9.它也可以接受BP [代表,"基本价格"]和有效数字和数学运营商)。我需要做的是获取该字符串中的数字并测试它是否是有效的ID。我创建了一个功能,可以删除不必要的字符,只获取ID:

protected int CheckValidID(string idString)
{
    bool IsValid = false;
    int ValidID = 0;
    String trimmedId = idString.Trim(new Char[] { ' ', '[', '@', 'I', 'D', '=', ']' });

    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT OptionChoiceId FROM ac_OptionChoices WHERE OptionChoiceId = @OptionChoiceID";
        cmd.Parameters.AddWithValue("@OptionChoiceID", trimmedId);
        cn.Open();

        using (IDataReader reader = cmd.ExecuteReader())
        {
            if (reader.Read())
                if (reader["OptionChoiceId"].ToString() != "")
                {
                    IsValid = true;
                    ValidID = Convert.ToInt32(reader["OptionChoiceId"]);
                }

        }
        cn.Close();
    }
    return ValidID;
}

如果传入的ID有效,那么我需要用一个数字(任意数字)替换该ID。

 if (PriceFormula.Text != "")
    {
        string pFormula = PriceFormula.Text;
        if (pFormula.Contains("@ID"))
        {
            CheckValidID(pFormula);
            if (CheckValidID(pFormula) != 0)
                pFormula = pFormula.Replace(PriceFormula.Text, "2");
        }
        pFormula = pFormula.Replace("BP", "2");
        pFormula = pFormula.ToLower();      
        try
        {
            double n = 0;
            bool priceVal = (!Double.TryParse(ItemLookUp.evalExpression(pFormula).ToString(), out n));
        }
        catch (Exception x)
        {
            isValid = false;
            ErrorNote.Text += "This new option choice has an invalid Price Formula. <br />";
        }

    }

我遇到的问题是,如果用户输入类似[@ID =#] * 9的内容,这意味着有效,但对我设置的内容不起作用。此外,即使用户输入有效ID,它也不起作用。我如何进行设置以便只检索[@ID =#]的ID部分,无论它是单独输入文本字段还是使用数字和数学运算符输入?

最后,我需要测试用户放入的内容是否实际返回有效结果(在本例中为有效的double)。 ID或BP文本被替换为数字(这里我使用2),并允许测试公式。但它的ID部分让我陷入困境。

文本字段的VALID条目示例:

  1. [@ ID = 532134]
  2. [@ ID = 828718] * 2
  3. [@ ID = 347479] * 3 + 2
  4. BP * 2
  5. BP + 6
  6. BP * 5 + 3
  7. INVALID条目的示例:

    1. [ID = 38288]
    2. @ ID = 383793
    3. [@ ID = 39371] +
    4. BP +
    5. BP * 2&#39;
    6. BP + 9 *
    7. BC * 6

2 个答案:

答案 0 :(得分:2)

如果格式是给定格式,那么我就不会发现这么多问题:

 var startIndex= inputString.IndexOf("[@ID=");
 var endIndex = inputString.LastIndexOf("]");

 if (startIndex < 0 || endIndex < startIndex)
     throw new ArgumentException("Format is not valid.");

 startIndex += "[@ID=".Length;
 var potentialIdString = inputString.Substring(startIndex, endIndex - startIndex);
 int id;

 if (int.TryParse(potentialIdString, out id))
      return id;
 else
     throw new ArgumentException("ID is not valid.");

答案 1 :(得分:0)

尝试正则表达式

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex(v=vs.110).aspx

public int CheckValidID(string idString)
{

    Regex rg = new Regex(@"\d*",RegexOptions.IgnoreCase);

    string val = rg.Match(idString).Value;

    int ValidID = Convert.ToInt32(val);

    return ValidID;

}