我试图弄清楚如何修剪一个字符串,这样我就得到了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条目示例:
INVALID条目的示例:
答案 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;
}