1 using System;
2 using System.Globalization;
3 using System.Text;
4 using System.Text.RegularExpressions;
5 using System.Web;
6 using System.Web.UI.WebControls;
7
8 namespace Util
9 {
10 ///
11 /// 页面数据校验类
12 /// Copyright (C) MES 2004-2012
13 ///
14 public class PageValidate
15 {
16 private static Regex RegPhone = new Regex("^[0-9]+[-]?[0-9]+[-]?[0-9]$");
17 private static Regex RegNumber = new Regex("^[0-9]+$");
18 private static Regex RegNumberSign = new Regex("^[+-]?[0-9]+$");
19 private static Regex RegDecimal = new Regex("^[0-9]+[.]?[0-9]+$");
20 private static Regex RegDecimalSign = new Regex("^[+-]?[0-9]+[.]?[0-9]+$"); //等价于^[+-]?\d+[.]?\d+$
21 private static Regex RegEmail = new Regex("^[\\w-]+@[\\w-]+\\.(com|net|org|edu|mil|tv|biz|info)$");//w 英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样
22 private static Regex RegCHZN = new Regex("[\u4e00-\u9fa5]");
23
24 public PageValidate()
25 {
26 }
27
28 #region 数字字符串检查
29 public static bool IsPhone(string inputData)
30 {
31 Match m = RegPhone.Match(inputData);
32 return m.Success;
33 }
34 ///
35 /// 检查Request查询字符串的键值,是否是数字,最大长度限制
36 ///
37 /// Request
38 /// Request的键值
39 /// 最大长度
40 /// 返回Request查询字符串
41 public static string FetchInputDigit(HttpRequest req, string inputKey, int maxLen)
42 {
43 string retVal = string.Empty;
44 if(inputKey != null && inputKey != string.Empty)
45 {
46 retVal = req.QueryString[inputKey];
47 if(null == retVal)
48 retVal = req.Form[inputKey];
49 if(null != retVal)
50 {
51 retVal = SqlText(retVal, maxLen);
52 if(!IsNumber(retVal))
53 retVal = string.Empty;
54 }
55 }
56 if(retVal == null)
57 retVal = string.Empty;
58 return retVal;
59 }
60 ///
61 /// 是否数字字符串
62 ///
63 /// 输入字符串
64 ///
65 public static bool IsNumber(string inputData)
66 {
67 Match m = RegNumber.Match(inputData);
68 return m.Success;
69 }
70
71 ///
72 /// 是否数字字符串 可带正负号
73 ///
74 /// 输入字符串
75 ///
76 public static bool IsNumberSign(string inputData)
77 {
78 Match m = RegNumberSign.Match(inputData);
79 return m.Success;
80 }
81 ///
82 /// 是否是浮点数
83 ///
84 /// 输入字符串
85 ///
86 public static bool IsDecimal(string inputData)
87 {
88 Match m = RegDecimal.Match(inputData);
89 return m.Success;
90 }
91 ///
92 /// 是否是浮点数 可带正负号
93 ///
94 /// 输入字符串
95 ///
96 public static bool IsDecimalSign(string inputData)
97 {
98 Match m = RegDecimalSign.Match(inputData);
99 return m.Success;
100 }
101
102 #endregion
103
104 #region 中文检测
105
106 ///
107 /// 检测是否有中文字符
108 ///
109 ///
110 ///
111 public static bool IsHasCHZN(string inputData)
112 {
113 Match m = RegCHZN.Match(inputData);
114 return m.Success;
115 }
116
117 #endregion
118
119 #region 邮件地址
120 ///
121 /// 是否是浮点数 可带正负号
122 ///
123 /// 输入字符串
124 ///
125 public static bool IsEmail(string inputData)
126 {
127 Match m = RegEmail.Match(inputData);
128 return m.Success;
129 }
130
131 #endregion
132
133 #region 日期格式判断
134 ///
135 /// 日期格式字符串判断
136 ///
137 ///
138 ///
139 public static bool IsDateTime(string str)
140 {
141 try
142 {
143 if (!string.IsNullOrEmpty(str))
144 {
145 DateTime.Parse(str);
146 return true;
147 }
148 else
149 {
150 return false;
151 }
152 }
153 catch
154 {
155 return false;
156 }
157 }
158 #endregion
159
160 #region 其他
161
162 ///
163 /// 检查字符串最大长度,返回指定长度的串
164 ///
165 /// 输入字符串
166 /// 最大长度
167 ///
168 public static string SqlText(string sqlInput, int maxLength)
169 {
170 if(sqlInput != null && sqlInput != string.Empty)
171 {
172 sqlInput = sqlInput.Trim();
173 if(sqlInput.Length > maxLength)//按最大长度截取字符串
174 sqlInput = sqlInput.Substring(0, maxLength);
175 }
176 return sqlInput;
177 }
178 ///
179 /// 字符串编码
180 ///
181 ///
182 ///
183 public static string HtmlEncode(string inputData)
184 {
185 return HttpUtility.HtmlEncode(inputData);
186 }
187 ///
188 /// 设置Label显示Encode的字符串
189 ///
190 ///
191 ///
192 public static void SetLabel(Label lbl, string txtInput)
193 {
194 lbl.Text = HtmlEncode(txtInput);
195 }
196 public static void SetLabel(Label lbl, object inputObj)
197 {
198 SetLabel(lbl, inputObj.ToString());
199 }
200 //字符串清理
201 public static string InputText(string inputString, int maxLength)
202 {
203 StringBuilder retVal = new StringBuilder();
204
205 // 检查是否为空
206 if ((inputString != null) && (inputString != String.Empty))
207 {
208 inputString = inputString.Trim();
209
210 //检查长度
211 if (inputString.Length > maxLength)
212 inputString = inputString.Substring(0, maxLength);
213
214 //替换危险字符
215 for (int i = 0; i < inputString.Length; i++)
216 {
217 switch (inputString[i])
218 {
219 case '"':
220 retVal.Append(""");
221 break;
222 case '<':
223 retVal.Append("<");
224 break;
225 case '>':
226 retVal.Append(">");
227 break;
228 case '\'':
229 retVal.Append("");//Ankang Add
230 break;
231 default:
232 retVal.Append(inputString[i]);
233 break;
234 }
235 }
236 retVal.Replace("'", " ");// 替换单引号
237 }
238 return retVal.ToString();
239
240 }
241 /// 目前未使用
242 /// 过滤SQL语句,防止注入
243 ///
244 ///
245 /// 0 - 没有注入, 1 - 有注入
246 public static int filterSql(string sSql)
247 {
248 int srcLen, decLen = 0;
249 sSql = sSql.ToLower().Trim();
250 srcLen = sSql.Length;
251 sSql = sSql.Replace("exec", "");
252 sSql = sSql.Replace("delete", "");
253 sSql = sSql.Replace("master", "");
254 sSql = sSql.Replace("truncate", "");
255 sSql = sSql.Replace("declare", "");
256 sSql = sSql.Replace("create", "");
257 sSql = sSql.Replace("xp_", "no");
258 decLen = sSql.Length;
259 if (srcLen == decLen)
260 return 0;
261 else return 1;
262 }
263
264 //字符串清理
265 public static string InputText(string inputString)
266 {
267 StringBuilder retVal = new StringBuilder();
268
269 // 检查是否为空
270 if ((inputString != null) && (inputString != String.Empty))
271 {
272 inputString = inputString.Trim();
273
274 //检查长度
275 //if (inputString.Length > maxLength)
276 // inputString = inputString.Substring(0, maxLength);
277
278 //替换危险字符
279 for (int i = 0; i < inputString.Length; i++)
280 {
281 switch (inputString[i])
282 {
283 case '"':
284 retVal.Append(""");
285 break;
286 case '<':
287 retVal.Append("<");
288 break;
289 case '>':
290 retVal.Append(">");
291 break;
292 default:
293 retVal.Append(inputString[i]);
294 break;
295 }
296 }
297 retVal.Replace("'", " ");// 替换单引号
298 }
299 return retVal.ToString();
300
301 }
302 ///
303 /// 转换成 HTML code
304 ///
305 /// string
306 /// string
307 public static string Encode(string str)
308 {
309 str = str.Replace("&","&");
310 str = str.Replace("'","''");
311 str = str.Replace("\"",""");
312 str = str.Replace(" "," ");
313 str = str.Replace("<","<");
314 str = str.Replace(">",">");
315 str = str.Replace("\n","
");
316 return str;
317 }
318 ///
319 ///解析html成 普通文本
320 ///
321 /// string
322 /// string
323 public static string Decode(string str)
324 {
325 str = str.Replace("
","\n");
326 str = str.Replace(">",">");
327 str = str.Replace("<","<");
328 str = str.Replace(" "," ");
329 str = str.Replace(""","\"");
330 return str;
331 }
332
333 public static string SqlTextClear(string sqlText)
334 {
335 if (sqlText == null)
336 {
337 return null;
338 }
339 if (sqlText == "")
340 {
341 return "";
342 }
343 sqlText = sqlText.Replace(",", "");//去除,
344 sqlText = sqlText.Replace("<", "");//去除<
345 sqlText = sqlText.Replace(">", "");//去除>
346 sqlText = sqlText.Replace("--", "");//去除--
347 sqlText = sqlText.Replace("'", "");//去除'
348 sqlText = sqlText.Replace("\"", "");//去除"
349 sqlText = sqlText.Replace("=", "");//去除=
350 sqlText = sqlText.Replace("%", "");//去除%
351 sqlText = sqlText.Replace(" ", "");//去除空格
352 return sqlText;
353 }
354
355 #region ReadPost 解析POST内的Data数据
356 ///
357 /// 接收Post请求的Data数据处理
358 /// 2021-02-03 added by hyx 读取POST信息方式
359 ///
360 public static string ReadPost(System.IO.Stream inputStreamTemp)
361 {
362 var inputStream = inputStreamTemp;
363 string str = "";
364 using (var sr = new System.IO.StreamReader(inputStream))
365 str = sr.ReadToEnd();
366 return str;
367 }
368 #endregion
369
370 #endregion
371
372 #region 是否由特定字符组成
373 public static bool isContainSameChar(string strInput)
374 {
375 string charInput = string.Empty;
376 if (!string.IsNullOrEmpty(strInput))
377 {
378 charInput = strInput.Substring(0, 1);
379 }
380 return isContainSameChar(strInput, charInput, strInput.Length);
381 }
382
383 public static bool isContainSameChar(string strInput, string charInput, int lenInput)
384 {
385 if (string.IsNullOrEmpty(charInput))
386 {
387 return false;
388 }
389 else
390 {
391 Regex RegNumber = new Regex(string.Format("^([{0}])+$", charInput));
392 //Regex RegNumber = new Regex(string.Format("^([{0}]{{1}})+$", charInput,lenInput));
393 Match m = RegNumber.Match(strInput);
394 return m.Success;
395 }
396 }
397 #endregion
398
399 #region 检查输入的参数是不是某些定义好的特殊字符:这个方法目前用于密码输入的安全检查
400 ///
401 /// 检查输入的参数是不是某些定义好的特殊字符:这个方法目前用于密码输入的安全检查
402 ///
403 public static bool isContainSpecChar(string strInput)
404 {
405 string[] list = new string[] { "123456", "654321" };
406 bool result = new bool();
407 for (int i = 0; i < list.Length; i++)
408 {
409 if (strInput == list[i])
410 {
411 result = true;
412 break;
413 }
414 }
415 return result;
416 }
417 #endregion
418
419 public static string SafeLongFilter(string text, long defaultValue, char split = ',')
420 {
421 if (text.Trim().Length < 1)
422 return defaultValue.ToString(CultureInfo.InvariantCulture);
423 string[] tmpSplit = text.Split(new[] { split }, StringSplitOptions.RemoveEmptyEntries);
424 if (tmpSplit.Length < 1)
425 return defaultValue.ToString(CultureInfo.InvariantCulture);
426
427 long tmp;
428 for (int i = 0; i < tmpSplit.Length; i++)
429 {
430 if (long.TryParse(tmpSplit[i], out tmp))
431 tmpSplit[i] = tmp.ToString(CultureInfo.InvariantCulture);
432 else
433 tmpSplit[i] = defaultValue.ToString(CultureInfo.InvariantCulture);
434 }
435 return string.Join(split.ToString(CultureInfo.InvariantCulture), tmpSplit);
436 }
437
438 public static String String2Json(String s)
439 {
440 StringBuilder sb = new StringBuilder();
441 for (int i = 0; i < s.Length; i++)
442 {
443 char c = s.ToCharArray()[i];
444 switch (c)
445 {
446 case '\"':
447 sb.Append("\\\""); break;
448 case '\\':
449 sb.Append("\\\\"); break;
450 case '/':
451 sb.Append("\\/"); break;
452 case '\b':
453 sb.Append("\\b"); break;
454 case '\f':
455 sb.Append("\\f"); break;
456 case '\n':
457 sb.Append("\\n"); break;
458 case '\r':
459 sb.Append("\\r"); break;
460 case '\t':
461 sb.Append("\\t"); break;
462 default:
463 if ((c >= 0 && c <= 31) || c == 127)//在ASCⅡ码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符
464 {
465
466 }
467 else
468 {
469 sb.Append(c);
470 }
471 break;
472 }
473 }
474 return sb.ToString();
475 }
476 }
477 }
后面会整理到中。