0

CSVファイルのすべての行を読み取るコードがあり、値が正しい値と一致しない場合、ユーザー画面に返されるエラーリストに追加されます。私が抱えている問題は、正規表現自体にあります。

protected void ReadData(string filePath, bool upload)
{
    StringBuilder sb = new StringBuilder();
    #region upload
    if (upload == true) // CSV file upload chosen
    {
        using (CsvReader csv = new CsvReader(new StreamReader(filePath), true)) // Cache CSV file to memory
        {
            int fieldCount = csv.FieldCount; // Total number of fields per row
            string[] headers = csv.GetFieldHeaders(); // Correct CSV headers stored in array 
            SortedList<int, string> errorList = new SortedList<int, string>(); // This list will contain error values
            bool errorFlag = false;
            int errorCount = 0;

            // Check if headers are correct first before reading data
            if (headers[0] != "first name" || headers[1] != "last name" || headers[2] != "job title" || headers[3] != "email address" || headers[4] != "telephone number" || headers[5] != "company" || headers[6] != "research manager" || headers[7] != "user card number")
            {
                sb.Append("Headers are incorrect");
            }

            else 
            {
                while (csv.ReadNextRecord())
                    try
                    {
                        //Check csv obj data for valid values
                        for (int i = 0; i < fieldCount; i++)
                        {
                            if (i == 0 || i == 1) // FirstName and LastName
                            {
                                if (Regex.IsMatch(csv[i].ToString(), "[a-zA-Z]", RegexOptions.IgnoreCase)) //REGEX letters only min of 5 char max of 20
                                {
                                    errorList.Add(errorCount, csv[i]);
                                    errorCount += 1;
                                    errorFlag = true;
                                    string text = csv[i].ToString();
                                }
                            }

                            else if (i == 5) // Company name
                            {
                                string text = csv[i];
                                text.Replace("&", "and");
                            }
                        } 

                        if (errorFlag == true)
                        {
                            sb.Append("<b>" + "Number of Error: " + errorCount + "</b>");
                            sb.Append("<ul>");
                            foreach (KeyValuePair<int, string> key in errorList)
                            {
                                sb.Append("<li>" + key.Value + "</li>");
                            }
                        }
                        else // All validation checks equaled to false. Create User
                        {

                            ORCLdap.CreateUserAccount(rootLDAPPath, svcUsername, svcPassword, csv[0], csv[1], csv[2], csv[3], csv[4], csv[5], csv[7]);
                            sb.Append("<b>New user data uploaded successfully</b>");
                        }

                    }// end of try

                    catch (Exception ex)
                    {
                        sb.Append(ex.ToString());
                    }

                    finally
                    {
                        lblMessage.Text = sb.ToString();
                        sb.Remove(0, sb.Length);

            }
        }
    }
    #endregion

lblMessage.text には、次の html が含まれています。

エラー数: 4

  • David1212
  • スミス
  • ニック444
  • Gowdy333

スミスには数字が含まれていないため、3 つのエラーになるはずです。

誰にもこれに関する提案はありますか?

4

2 に答える 2

1

論理エラーもあります。

if (Regex.IsMatch(csv[i].ToString(), "[a-zA-Z]", RegexOptions.IgnoreCase)) //REGEX letters only min of 5 char max of 20

する必要があります

if (!Regex.IsMatch(csv[i].ToString(), "^[a-zA-Z]+$", RegexOptions.IgnoreCase)) //REGEX letters only min of 5 char max of 20

名前にそれ以外の文字が含まれている場合はエラーになるだけだから[a-zA-Z]ですよね?

(そして、あなたがRegexOptions.IgnoreCase必要としないのであれば[a-zA-Z][a-z]そうするでしょう)

于 2012-09-26T08:50:51.547 に答える
0

正規表現に単語の境界を追加するか、「^」で始まり「$」で終わる必要があります。 ^[a-zA-Z]+$

http://regexr.com?3298g

現在の正規表現は正しくなく、azまたはAZを含む任意の文字列、任意の文字、任意の位置に一致します。

http://regexr.com?3298j

于 2012-09-26T08:44:52.553 に答える