输入的字符串校验,是开发中经常遇到的问题,常用的办法是利用正则表达式进行判断。其特点是简洁有效。
1、正则表达基础知识
正则表达式的教程很多,这里两个基础教程:
a、http://www.cnblogs.com/youring2/archive/2009/11/07/1597786.html
b、http://wenku.baidu.com/view/b473c4de50e2524de5187e74.html
2、常用的正则表达式
下面是一些常用的基于正则表达式的字符串校验
1 "^\d+$" //非负整数(正整数 + 0) 2 "^[0-9]*[1-9][0-9]*$" //正整数 3 "^((-\d+)|(0+))$" //非正整数(负整数 + 0) 4 "^-[0-9]*[1-9][0-9]*$" //负整数 5 "^-?\d+$" //整数 6 "^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0) 7 "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数 8 "^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0) 9 "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数 10 "^(-?\d+)(\.\d+)?$" //浮点数 11 "^[A-Za-z]+$" //由26个英文字母组成的字符串 12 "^[A-Z]+$" //由26个英文字母的大写组成的字符串 13 "^[a-z]+$" //由26个英文字母的小写组成的字符串 14 "^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串 15 "^\w+$" //由数字、26个英文字母或者下划线组成的字符串 16 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址 17 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url 18 /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 19 /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 20 "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil 21 "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码 22 "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址
参考来源:http://blog.csdn.net/microlchen/article/details/7445846
3、示例
现在通过整理一些资料编写了一个正则表达式验证的类库,供以后需要使用。
a、验证类库,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System; using System.Text.RegularExpressions; namespace cxlib { /// <summary> /// Regexlib 的摘要说明。 /// </summary> public class CxRegexLib { public CxRegexLib() { // // TODO: 在此处添加构造函数逻辑 // } //验证Email地址 public bool IsValidEmail(string strIn) { // Return true if strIn is in valid e-mail format. return Regex.IsMatch(strIn, "^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$"); } //dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。 public string MDYToDMY(String input) { return Regex.Replace(input,"//b(?//d{1,2})/(?//d{1,2})/(?//d{2,4})//b","${day}-${month}-${year}"); } //验证是否为小数 public bool IsValidDecimal(string strIn) { return Regex.IsMatch(strIn,"^[0]{0,1}[.]{1}[0-9]{1,}$"); } //验证两位小数 public bool Is2Decimal(string str_decimal) { return System.Text.RegularExpressions.Regex.IsMatch(str_decimal, @"^[0-9]*[.]{1}[0-9]{2}$"); } //验证一年的12个月 public bool IsMonth(string str_Month) { return System.Text.RegularExpressions.Regex.IsMatch(str_Month, @"^(0?[[1-9]|1[0-2])$"); } //验证一个月的31天 public bool IsDay(string str_day) { return System.Text.RegularExpressions.Regex.IsMatch(str_day, @"^((0?[1-9])|((1|2)[0-9])|30|31)$"); } //验证是否为电话号码 public bool IsValidTel(string strIn) { return Regex.IsMatch(strIn,@"(/d+-)?(/d{4}-?/d{7}|/d{3}-?/d{8}|^/d{7,8})(-/d+)?"); } //验证年月日 public bool IsValidDate(string strIn) { return Regex.IsMatch(strIn,@"^2/d{3}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|[1-2]/d|3[0-1])(?:0?[1-9]|1/d|2[0-3]):(?:0?[1-9]|[1-5]/d):(?:0?[1-9]|[1-5]/d)$"); } //验证后缀名 public bool IsValidPostfix(string strIn) { return Regex.IsMatch(strIn,@"/.(?i:gif|jpg)$"); } //验证字符是否在4至12之间 public bool IsValidByte(string strIn) { return Regex.IsMatch(strIn,@"^[a-z]{4,12}$"); } //验证IP public bool IsValidIp(string strIn) { return Regex.IsMatch(strIn,@"^(/d{1,2}|1/d/d|2[0-4]/d|25[0-5])/.(/d{1,2}|1/d/d|2[0-4]/d|25[0-5])/.(/d{1,2}|1/d/d|2[0-4]/d|25[0-5])/.(/d{1,2}|1/d/d|2[0-4]/d|25[0-5])$"); } // 验证输入汉字 public bool IsChinese(string str_chinese) { return System.Text.RegularExpressions.Regex.IsMatch(str_chinese, @"^[/u4e00-/u9fa5],{0,}$"); } //验证输入字符串 (至少8个字符) public bool IsLength(string str_Length) { return System.Text.RegularExpressions.Regex.IsMatch(str_Length, "^.{8,}$"); } //验证数字输入 public bool IsNumber(string str_number) { return System.Text.RegularExpressions.Regex.IsMatch(str_number, "^[0-9]+$"); } //验证整数 public bool IsInteger(string str_number) { return System.Text.RegularExpressions.Regex.IsMatch(str_number, "^[-,+]?[0-9]+$"); } //验证手机 public bool IsCellphoneNum(string str_number) { return System.Text.RegularExpressions.Regex.IsMatch(str_number, "^[1]{1}[0-9]{10}$"); } // 验证密码长度 (6-18位) public bool IsPasswLength(string str_Length) { return System.Text.RegularExpressions.Regex.IsMatch(str_Length, "^/d{6,18}$"); } } }
b、调用代码,如下所示:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using cxlib; namespace TestInputValidation { public partial class Form1 : Form { CxRegexLib cxregex; public Form1() { InitializeComponent(); cxregex = new CxRegexLib(); } private void textBox1_Leave(object sender, EventArgs e) { bool flag = cxregex.IsValidEmail(textBox1.Text.Trim()); if (flag == false) { toolStripStatusLabelResult.Text = "邮箱格式不正确!"; }else { toolStripStatusLabelResult.Text = "邮箱格式正确!"; } } private void textBox2_Leave(object sender, EventArgs e) { bool flag = cxregex.IsValidDecimal(textBox2.Text.Trim()); if (flag == false) { toolStripStatusLabelResult.Text = "不是小数!"; } else { toolStripStatusLabelResult.Text = "这是小数!"; } } private void textBox3_Leave(object sender, EventArgs e) { bool flag = cxregex.Is2Decimal(textBox3.Text.Trim()); if (flag == false) { toolStripStatusLabelResult.Text = "不是保留两位小数!"; } else { toolStripStatusLabelResult.Text = "保留两位小数!"; } } private void textBox4_Leave(object sender, EventArgs e) { bool flag = cxregex.IsNumber(textBox4.Text.Trim()); if (flag == false) { toolStripStatusLabelResult.Text = "不是数字!"; } else { toolStripStatusLabelResult.Text = "这是数字!"; } }
private void textBox5_Leave(object sender, EventArgs e) { bool flag = cxregex.IsInteger(textBox5.Text.Trim()); if (flag == false) { toolStripStatusLabelResult.Text = "不是整数!"; } else { toolStripStatusLabelResult.Text = "这是整数!"; } } private void textBox6_Leave(object sender, EventArgs e) { bool flag = cxregex.IsCellphoneNum(textBox6.Text.Trim()); if (flag == false) { toolStripStatusLabelResult.Text = "不是手机!"; } else { toolStripStatusLabelResult.Text = "这是手机!"; } } } }
c、运行程序,界面如下图所示:
通过Tab键,离开编辑框后进行正确性校验。
d、代码工程: