99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀C#讀取Excel的三種方式以及比較
C#讀取Excel的三種方式以及比較
2018-01-04
收藏

C#讀取Excel的三種方式以及比較
(1)OleDB方式
優(yōu)點(diǎn):將Excel直接當(dāng)做數(shù)據(jù)源處理,通過(guò)SQL直接讀取內(nèi)容,讀取速度較快。
缺點(diǎn):讀取數(shù)據(jù)方式不夠靈活,無(wú)法直接讀取某一個(gè)單元格,只有將整個(gè)Sheet頁(yè)讀取出來(lái)后(結(jié)果為Datatable)再在Datatable中根據(jù)行列數(shù)來(lái)獲取指定的值。

當(dāng)Excel數(shù)據(jù)量很大時(shí)。會(huì)非常占用內(nèi)存,當(dāng)內(nèi)存不夠時(shí)會(huì)拋出內(nèi)存溢出的異常。
讀取代碼如下:
   1: public DataTable GetExcelTableByOleDB(string strExcelPath, string tableName)

   2: {

   3:     try

   4:     {

   5:         DataTable dtExcel = new DataTable();

   6:         //數(shù)據(jù)表

   7:         DataSet ds = new DataSet();

   8:         //獲取文件擴(kuò)展名

   9:         string strExtension = System.IO.Path.GetExtension(strExcelPath);

  10:         string strFileName = System.IO.Path.GetFileName(strExcelPath);

  11:         //Excel的連接

  12:         OleDbConnection objConn = null;

  13:         switch (strExtension)

  14:         {

  15:             case ".xls":

  16:                 objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"");

  17:                 break;

  18:             case ".xlsx":

  19:                 objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"");

  20:                 break;

  21:             default:

  22:                 objConn = null;

  23:                 break;

  24:         }

  25:         if (objConn == null)

  26:         {

  27:             return null;

  28:         }

  29:         objConn.Open();

  30:         //獲取Excel中所有Sheet表的信息

  31:         //System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);

  32:         //獲取Excel的第一個(gè)Sheet表名

  33:         //string tableName = schemaTable.Rows[0][2].ToString().Trim();

  34:         string strSql = "select * from [" + tableName + "]";

  35:         //獲取Excel指定Sheet表中的信息

  36:         OleDbCommand objCmd = new OleDbCommand(strSql, objConn);

  37:         OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);

  38:         myData.Fill(ds, tableName);//填充數(shù)據(jù)

  39:         objConn.Close();

  40:         //dtExcel即為excel文件中指定表中存儲(chǔ)的信息

  41:         dtExcel = ds.Tables[tableName];

  42:         return dtExcel;

  43:     }

  44:     catch

  45:     {

  46:         return null;

  47:     }

  48: }

下面說(shuō)明一下連接字符串

        HDR=Yes,這代表第一行是標(biāo)題,不做為數(shù)據(jù)使用(但是我在實(shí)際使用中,如果第一行存在復(fù)雜數(shù)值,那么讀取得到的Datatable列標(biāo)題會(huì)自動(dòng)設(shè)置為F1、F2等方式命名,與實(shí)際應(yīng)用不符,所以當(dāng)時(shí)是通過(guò)HDR=No方式將所有內(nèi)容讀取到Datatable中,然后手動(dòng)將第一行設(shè)置成標(biāo)題的);IMEX ( IMport EXport mode )設(shè)置
IMEX 有三種模式:
0 is Export mode
1 is Import mode
2 is Linked mode (full update capabilities)
我這里特別要說(shuō)明的就是 IMEX 參數(shù)了,因?yàn)椴煌哪J酱碇煌淖x寫(xiě)行為:
當(dāng) IMEX=0 時(shí)為“匯出模式”,這個(gè)模式開(kāi)啟的 Excel 檔案只能用來(lái)做“寫(xiě)入”用途。
當(dāng) IMEX=1 時(shí)為“匯入模式”,這個(gè)模式開(kāi)啟的 Excel 檔案只能用來(lái)做“讀取”用途。
當(dāng) IMEX=2 時(shí)為“鏈接模式”,這個(gè)模式開(kāi)啟的 Excel 檔案可同時(shí)支援“讀取”與“寫(xiě)入”用途。

---------------------------------

另外,讀取Excel2007版本的文件時(shí),版本應(yīng)該從8.0改為12.0,同時(shí)驅(qū)動(dòng)不能再用Jet,而應(yīng)該用ACE。負(fù)責(zé)會(huì)造成“找不到可安裝的 ISAM”的錯(cuò)誤。

---------------------------------

在網(wǎng)上還發(fā)現(xiàn)采用這種方式存在取出的Sheet表的個(gè)數(shù)多于實(shí)際Excel表中的Sheet表個(gè)數(shù)的情況,其原因有二:

1. 取出的名稱中,包括了XL命名管理器中的名稱(參見(jiàn)XL2007的公式--命名管理器, 快捷鍵Crtl+F3);

2. 取出的名稱中,包括了FilterDatabase后綴的, 這是XL用來(lái)記錄Filter范圍的。

對(duì)于第一點(diǎn)比較簡(jiǎn)單, 刪除已有命名管理器中的內(nèi)容即可;第二點(diǎn)處理起來(lái)比較麻煩, Filter刪除后這些名稱依然保留著,簡(jiǎn)單的做法是新增Sheet然后將原Sheet Copy進(jìn)去。但實(shí)際情況并不能為每個(gè)Excel做以上檢查。下面給出了過(guò)濾的方案。(此問(wèn)題我們有驗(yàn)證過(guò),大家自己驗(yàn)證一下吧)

   1: //objConn為讀取Excel的鏈接,下面通過(guò)過(guò)濾來(lái)獲取有效的Sheet頁(yè)名稱集合

   2:   System.Data.DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);

   3:   List<string> lstSheetNames = new List<string>();

   4:   for (int i = 0; i < schemaTable.Rows.Count; i++)

   5:   {

   6:       string strSheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"];

   7:       if (strSheetName.Contains("$") && !strSheetName.Replace("'", "").EndsWith("$"))

   8:       {

   9:           //過(guò)濾無(wú)效SheetName完畢....

  10:           continue;

  11:       }

  12:       if (lstSheetNames != null && !lstSheetNames.Contains(strSheetName))

  13:           lstSheetNames.Add(strSheetName);

  14:   }

因?yàn)樽x取出來(lái)無(wú)效SheetName一般情況最后一個(gè)字符都不會(huì)是$。如果SheetName有一些特殊符號(hào),讀取出來(lái)的SheetName會(huì)自動(dòng)加上單引號(hào)。比如在Excel中將SheetName編輯成MySheet(1),此時(shí)讀取出來(lái)的SheetName就為:'MySheet(1)$',所以判斷最后一個(gè)字符是不是$之前最好過(guò)濾一下單引號(hào)。

---------------------------------

(2)Com組件的方式(通過(guò)添加 Microsoft.Office.Interop.Excel引用實(shí)現(xiàn))

優(yōu)點(diǎn):能夠非常靈活的讀取Excel中的數(shù)據(jù),用戶可以靈活的調(diào)用各種函數(shù)進(jìn)行處理。

缺點(diǎn):基于單元格的處理,讀取速度較慢,對(duì)于數(shù)據(jù)量較大的文件最好不要使用此種方式讀取。

           需要添加相應(yīng)的DLL引用,必須存在此引用才可使用,如果是Web站點(diǎn)部署在IIS上時(shí),還需要服務(wù)器機(jī)子已安裝了Excel,有時(shí)候還需要為配置IIS權(quán)限。

讀取代碼如下:

   1: private Stopwatch wath = new Stopwatch();

   2: /// <summary>

   3: /// 使用COM讀取Excel

   4: /// </summary>

   5: /// <param name="excelFilePath">路徑</param>

   6: /// <returns>DataTabel</returns>

   7: public System.Data.DataTable GetExcelData(string excelFilePath)

   8: {

   9:     Excel.Application app = new Excel.Application();

  10:     Excel.Sheets sheets;

  11:     Excel.Workbook workbook = null;

  12:     object oMissiong = System.Reflection.Missing.Value;

  13:     System.Data.DataTable dt = new System.Data.DataTable();

  14:     wath.Start();

  15:     try

  16:     {

  17:         if (app == null)

  18:         {

  19:             return null;

  20:         }

  21:         workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong,

  22:             oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);

  23:         //將數(shù)據(jù)讀入到DataTable中——Start   

  24:         sheets = workbook.Worksheets;

  25:         Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);//讀取第一張表

  26:         if (worksheet == null)

  27:             return null;

  28:         string cellContent;

  29:         int iRowCount = worksheet.UsedRange.Rows.Count;

  30:         int iColCount = worksheet.UsedRange.Columns.Count;

  31:         Excel.Range range;

  32:         //負(fù)責(zé)列頭Start

  33:         DataColumn dc;

  34:         int ColumnID = 1;

  35:         range = (Excel.Range)worksheet.Cells[1, 1];

  36:         while (range.Text.ToString().Trim() != "")

  37:         {

  38:             dc = new DataColumn();

  39:             dc.DataType = System.Type.GetType("System.String");

  40:             dc.ColumnName = range.Text.ToString().Trim();

  41:             dt.Columns.Add(dc);

  42:  

  43:             range = (Excel.Range)worksheet.Cells[1, ++ColumnID];

  44:         }

  45:         //End

  46:         for (int iRow = 2; iRow <= iRowCount; iRow++)

  47:         {

  48:             DataRow dr = dt.NewRow();

  49:             for (int iCol = 1; iCol <= iColCount; iCol++)

  50:             {

  51:                 range = (Excel.Range)worksheet.Cells[iRow, iCol];

  52:                 cellContent = (range.Value2 == null) ? "" : range.Text.ToString();

  53:                     dr[iCol - 1] = cellContent;

  54:             }

  55:             dt.Rows.Add(dr);

  56:         }

  57:         wath.Stop();

  58:         TimeSpan ts = wath.Elapsed;

  59:         //將數(shù)據(jù)讀入到DataTable中——End

  60:         return dt;

  61:     }

  62:     catch

  63:     {

  64:         return null;

  65:     }

  66:     finally

  67:     {

  68:         workbook.Close(false, oMissiong, oMissiong);

  69:         System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);

  70:         workbook = null;

  71:         app.Workbooks.Close();

  72:         app.Quit();

  73:         System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

  74:         app = null;

  75:         GC.Collect();

  76:         GC.WaitForPendingFinalizers();

  77:     }

  78: }

  79: /// <summary>

  80: /// 使用COM,多線程讀取Excel(1 主線程、4 副線程)

  81: /// </summary>

  82: /// <param name="excelFilePath">路徑</param>

  83: /// <returns>DataTabel</returns>

  84: public System.Data.DataTable ThreadReadExcel(string excelFilePath)

  85: {

  86:     Excel.Application app = new Excel.Application();

  87:     Excel.Sheets sheets = null;

  88:     Excel.Workbook workbook = null;

  89:     object oMissiong = System.Reflection.Missing.Value;

  90:     System.Data.DataTable dt = new System.Data.DataTable();

  91:     wath.Start();

  92:     try

  93:     {

  94:         if (app == null)

  95:         {

  96:             return null;

  97:         }

  98:         workbook = app.Workbooks.Open(excelFilePath, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong,

  99:             oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong, oMissiong);

 100:         //將數(shù)據(jù)讀入到DataTable中——Start   

 101:         sheets = workbook.Worksheets;

 102:         Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);//讀取第一張表

 103:         if (worksheet == null)

 104:             return null;

 105:         string cellContent;

 106:         int iRowCount = worksheet.UsedRange.Rows.Count;

 107:         int iColCount = worksheet.UsedRange.Columns.Count;

 108:         Excel.Range range;

 109:         //負(fù)責(zé)列頭Start

 110:         DataColumn dc;

 111:         int ColumnID = 1;

 112:         range = (Excel.Range)worksheet.Cells[1, 1];

 113:         while (iColCount >= ColumnID)

 114:         {

 115:             dc = new DataColumn();

 116:             dc.DataType = System.Type.GetType("System.String");

 117:             string strNewColumnName = range.Text.ToString().Trim();

 118:             if (strNewColumnName.Length == 0) strNewColumnName = "_1";

 119:             //判斷列名是否重復(fù)

 120:             for (int i = 1; i < ColumnID; i++)

 121:             {

 122:                 if (dt.Columns[i - 1].ColumnName == strNewColumnName)

 123:                     strNewColumnName = strNewColumnName + "_1";

 124:             }

 125:             dc.ColumnName = strNewColumnName;

 126:             dt.Columns.Add(dc);

 127:             range = (Excel.Range)worksheet.Cells[1, ++ColumnID];

 128:         }

 129:         //End

 130:         //數(shù)據(jù)大于500條,使用多進(jìn)程進(jìn)行讀取數(shù)據(jù)

 131:         if (iRowCount - 1 > 500)

 132:         {

 133:             //開(kāi)始多線程讀取數(shù)據(jù)

 134:             //新建線程

 135:             int b2 = (iRowCount - 1) / 10;

 136:             DataTable dt1 = new DataTable("dt1");

 137:             dt1 = dt.Clone();

 138:             SheetOptions sheet1thread = new SheetOptions(worksheet, iColCount, 2, b2 + 1, dt1);

 139:             Thread othread1 = new Thread(new ThreadStart(sheet1thread.SheetToDataTable));

 140:             othread1.Start();

 141:             //阻塞 1 毫秒,保證第一個(gè)讀取 dt1

 142:             Thread.Sleep(1);

 143:             DataTable dt2 = new DataTable("dt2");

 144:             dt2 = dt.Clone();

 145:             SheetOptions sheet2thread = new SheetOptions(worksheet, iColCount, b2 + 2, b2 * 2 + 1, dt2);

 146:             Thread othread2 = new Thread(new ThreadStart(sheet2thread.SheetToDataTable));

 147:             othread2.Start();

 148:             DataTable dt3 = new DataTable("dt3");

 149:             dt3 = dt.Clone();

 150:             SheetOptions sheet3thread = new SheetOptions(worksheet, iColCount, b2 * 2 + 2, b2 * 3 + 1, dt3);

 151:             Thread othread3 = new Thread(new ThreadStart(sheet3thread.SheetToDataTable));

 152:             othread3.Start();

 153:             DataTable dt4 = new DataTable("dt4");

 154:             dt4 = dt.Clone();

 155:             SheetOptions sheet4thread = new SheetOptions(worksheet, iColCount, b2 * 3 + 2, b2 * 4 + 1, dt4);

 156:             Thread othread4 = new Thread(new ThreadStart(sheet4thread.SheetToDataTable));

 157:             othread4.Start();

 158:             //主線程讀取剩余數(shù)據(jù)

 159:             for (int iRow = b2 * 4 + 2; iRow <= iRowCount; iRow++)

 160:             {

 161:                 DataRow dr = dt.NewRow();

 162:                 for (int iCol = 1; iCol <= iColCount; iCol++)

 163:                 {

 164:                     range = (Excel.Range)worksheet.Cells[iRow, iCol];

 165:                     cellContent = (range.Value2 == null) ? "" : range.Text.ToString();

 166:                     dr[iCol - 1] = cellContent;

 167:                 }

 168:                 dt.Rows.Add(dr);

 169:             }

 170:             othread1.Join();

 171:             othread2.Join();

 172:             othread3.Join();

 173:             othread4.Join();

 174:             //將多個(gè)線程讀取出來(lái)的數(shù)據(jù)追加至 dt1 后面

 175:             foreach (DataRow dr in dt.Rows)

 176:                 dt1.Rows.Add(dr.ItemArray);

 177:             dt.Clear();

 178:             dt.Dispose();

 179:             foreach (DataRow dr in dt2.Rows)

 180:                 dt1.Rows.Add(dr.ItemArray);

 181:             dt2.Clear();

 182:             dt2.Dispose();

 183:             foreach (DataRow dr in dt3.Rows)

 184:                 dt1.Rows.Add(dr.ItemArray);

 185:             dt3.Clear();

 186:             dt3.Dispose();

 187:             foreach (DataRow dr in dt4.Rows)

 188:                 dt1.Rows.Add(dr.ItemArray);

 189:             dt4.Clear();

 190:             dt4.Dispose();

 191:             return dt1;

 192:         }

 193:         else

 194:         {

 195:             for (int iRow = 2; iRow <= iRowCount; iRow++)

 196:             {

 197:                 DataRow dr = dt.NewRow();

 198:                 for (int iCol = 1; iCol <= iColCount; iCol++)

 199:                 {

 200:                     range = (Excel.Range)worksheet.Cells[iRow, iCol];

 201:                     cellContent = (range.Value2 == null) ? "" : range.Text.ToString();

 202:                     dr[iCol - 1] = cellContent;

 203:                 }

 204:                 dt.Rows.Add(dr);

 205:             }

 206:         }

 207:         wath.Stop();

 208:         TimeSpan ts = wath.Elapsed;

 209:         //將數(shù)據(jù)讀入到DataTable中——End

 210:         return dt;

 211:     }

 212:     catch

 213:     {

 214:         return null;

 215:     }

 216:     finally

 217:     {

 218:         workbook.Close(false, oMissiong, oMissiong);

 219:         System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);

 220:         System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets);

 221:         workbook = null;

 222:         app.Workbooks.Close();

 223:         app.Quit();

 224:         System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

 225:         app = null;

 226:         GC.Collect();

 227:         GC.WaitForPendingFinalizers();

 228:     }

 229: }

---------------------------------

(3)NPOI方式讀取Excel(此方法未經(jīng)過(guò)測(cè)試)

NPOI 是 POI 項(xiàng)目的 .NET 版本。POI是一個(gè)開(kāi)源的Java讀寫(xiě)Excel、WORD等微軟OLE2組件文檔的項(xiàng)目。使用 NPOI 你就可以在沒(méi)有安裝 Office 或者相應(yīng)環(huán)境的機(jī)器上對(duì) WORD/EXCEL 文檔進(jìn)行讀寫(xiě)。

優(yōu)點(diǎn):讀取Excel速度較快,讀取方式操作靈活性

缺點(diǎn):需要下載相應(yīng)的插件并添加到系統(tǒng)引用當(dāng)中。

   1: /// <summary>

   2: /// 將excel中的數(shù)據(jù)導(dǎo)入到DataTable中

   3: /// </summary>

   4: /// <param name="sheetName">excel工作薄sheet的名稱</param>

   5: /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>

   6: /// <returns>返回的DataTable</returns>

   7: public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn)

   8: {

   9:     ISheet sheet = null;

  10:     DataTable data = new DataTable();

  11:     int startRow = 0;

  12:     try

  13:     {

  14:         fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);

  15:         if (fileName.IndexOf(".xlsx") > 0) // 2007版本

  16:             workbook = new XSSFWorkbook(fs);

  17:         else if (fileName.IndexOf(".xls") > 0) // 2003版本

  18:             workbook = new HSSFWorkbook(fs);

  19:         if (sheetName != null)

  20:         {

  21:             sheet = workbook.GetSheet(sheetName);

  22:         }

  23:         else

  24:         {

  25:             sheet = workbook.GetSheetAt(0);

  26:         }

  27:         if (sheet != null)

  28:         {

  29:             IRow firstRow = sheet.GetRow(0);

  30:             int cellCount = firstRow.LastCellNum; //一行最后一個(gè)cell的編號(hào) 即總的列數(shù)

  31:             if (isFirstRowColumn)

  32:             {

  33:                 for (int i = firstRow.FirstCellNum; i < cellCount; ++i)

  34:                 {

  35:                     DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue);

  36:                     data.Columns.Add(column);

  37:                 }

  38:                 startRow = sheet.FirstRowNum + 1;

  39:             }

  40:             else

  41:             {

  42:                 startRow = sheet.FirstRowNum;

  43:             }

  44:             //最后一列的標(biāo)號(hào)

  45:             int rowCount = sheet.LastRowNum;

  46:             for (int i = startRow; i <= rowCount; ++i)

  47:             {

  48:                 IRow row = sheet.GetRow(i);

  49:                 if (row == null) continue; //沒(méi)有數(shù)據(jù)的行默認(rèn)是null       

  50:                 

  51:                 DataRow dataRow = data.NewRow();

  52:                 for (int j = row.FirstCellNum; j < cellCount; ++j)

  53:                 {

  54:                     if (row.GetCell(j) != null) //同理,沒(méi)有數(shù)據(jù)的單元格都默認(rèn)是null

  55:                         dataRow[j] = row.GetCell(j).ToString();

  56:                 }

  57:                 data.Rows.Add(dataRow);

  58:             }

  59:         }

  60:         return data;

  61:     }

  62:     catch (Exception ex)

  63:     {

  64:         Console.WriteLine("Exception: " + ex.Message);

  65:         return null;

  66:     }

  67: }

SQL

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }