简单正则表达式验证Email地址是否正确
private bool IsValidEmail(string strIn) { return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); }
本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/articles/1532590.html,如需转载请自行联系原作者
2、Android构建本地单元测试
如果你的单元测试在Android中没有依赖或者只有简单的以来,你可以在你的本地开发环境中运行你的测试。这种测试比较高效因为它能让你避免将整个app安装到物理设备或虚拟机中执行单元测试。最后,执行单元测试的时间大量减少。你可以通过模拟框架,比如Mockito来模拟依赖关系。
配置你的测试环境
前文已经叙述。
创建一个本地单元类
你的本地测试单元类风格类似Junit 4测试类。Junit是Java最流行应用最广泛的单元测试类。最新的版本,Junit 4,允许你用比之前版本更简洁和灵活的方式编写测试。跟之前的版本不同,在Junit 4中,你不需要扩展junit.framework.TestCase类了。你也不需要在每个测试方法前加前缀test或者使用在junit.framework 或 junit.extensions中的包。
创建一个基本的Junit 4 测试类,你可以创建一个包含一个或多个测试方法的Java类。每个测试方法都用@Test 标注。如下:
import org.junit.Test;
import java.util.regex.Pattern;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class EmailValidatorTest {
@Test
public void emailValidator_CorrectEmailSimple_ReturnsTrue() {
assertThat(EmailValidator.isValidEmail("name@email.com"), is(true));
}
}
为了测试你的APP组件返回期望的记过,使用Assert方法来执行检查。
模拟Android 依赖
默认情况下,Gradle的安卓插件依靠一个经过修改的android.jar的库,不包含任何真正的代码,调用的任何的Android的类都被视为异常。
你可以使用一个模拟框架来排除你代码中额外的依赖,让你的组件通过期望的方式与依赖交互。
添加一个虚拟对象到你的本地单元测试,跟随如下几步:
1、 将Mockito依赖添加到build.gradle文件中
2、 在你的测试类前添加@RunWith(MockitoJUnitRunner.class)注解。
3、 创建一个mock对象,用@Mock注解
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.CoreMatchers.*;
import static org.mockito.Mockito.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import android.content.SharedPreferences;
@RunWith(MockitoJUnitRunner.class)
public class UnitTestSample {
private static final String FAKE_STRING = "HELLO WORLD";
@Mock
Context mMockContext;
@Test
public void readStringFromContext_LocalizedString() {
when(mMockContext.getString(R.string.hello_word))
.thenReturn(FAKE_STRING);
ClassUnderTest myObjectUnderTest = new ClassUnderTest(mMockContext);
String result = myObjectUnderTest.getHelloWorldString();
assertThat(result, is(FAKE_STRING));
}
}
本文作者:宋志辉
个人微博:点击进入
文章
测试技术 · Android开发 · Java
2016-06-14
简单C# 验证类
using System;
using System.Text.RegularExpressions;
namespace bobomousecom.crm
{
/// <summary>
/// Regexlib 的摘要说明。
/// </summary>
public class Regexlib
{
public Regexlib()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//搜索输入字符串并返回所有 href=“...”值
string DumpHrefs(String inputString)
{
Regex r;
Match m;
r = new Regex("href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))",
RegexOptions.IgnoreCase|RegexOptions.Compiled);
for (m = r.Match(inputString); m.Success; m = m.NextMatch())
{
return("Found href " + m.Groups[1]);
}
}
//验证Email地址
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
//dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。
string MDYToDMY(String input)
{
return Regex.Replace(input,"\\b(?\\d{1,2})/(?\\d{1,2})/(?\\d{2,4})\\b","${day}-${month}-${year}");
}
//验证是否为小数
bool IsValidDecimal(string strIn)
{
return Regex.IsMatch(strIn,@"[0].\d{1,2}|[1]");
}
//验证是否为电话号码
bool IsValidTel(string strIn)
{
return Regex.IsMatch(strIn,@"(\d+-)?(\d{4}-?\d{7}|\d{3}-?\d{8}|^\d{7,8})(-\d+)?");
}
//验证年月日
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)$");
}
//验证后缀名
bool IsValidPostfix(string strIn)
{
return Regex.IsMatch(strIn,@"\.(?i:gif|jpg)$");
}
//验证字符是否在4至12之间
bool IsValidByte(string strIn)
{
return Regex.IsMatch(strIn,@"^[a-z]{4,12}$");
}
//验证IP
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])$");
}
}
}
第二十三章:触发器和行为(八)
具有属性的行为Behavior 类派生自Behavior类,该类派生自BindableObject。这表明您的Behavior 派生可以定义自己的可绑定属性。之前你看过一些Action 衍生产品,比如ScaleAction和ShiverAction,它们定义了一些属性以赋予它们更大的灵活性。但是Behavior 派生可以定义可绑定属性,可以作为数据绑定的源属性。这意味着您不必对行为进行硬编码以修改特定属性,例如将Entry的TextColor属性设置为Red。您可以稍后决定希望行为如何影响用户界面,并在XAML文件中实现该权限。这为行为提供了更大的灵活性,并允许XAML在与用户界面相关的行为方面发挥更大的作用。这是一个名为ValidEmailBehavior的Xamarin.FormsBook.Toolkit库中的类,它与NumericValidationBehavior类似,只是它使用正则表达式来确定Entry的Text属性是否是有效的电子邮件地址:
amespace Xamarin.FormsBook.Toolkit
{
public class ValidEmailBehavior : Behavior<Entry>
{
static readonly BindablePropertyKey IsValidPropertyKey =
BindableProperty.CreateReadOnly("IsValid",
typeof(bool),
typeof(ValidEmailBehavior),
false);
public static readonly BindableProperty IsValidProperty =
IsValidPropertyKey.BindableProperty;
public bool IsValid
{
private set { SetValue(IsValidPropertyKey, value); }
get { return (bool)GetValue(IsValidProperty); }
}
protected override void OnAttachedTo(Entry entry)
{
entry.TextChanged += OnEntryTextChanged;
base.OnAttachedTo(entry);
}
protected override void OnDetachingFrom(Entry entry)
{
entry.TextChanged -= OnEntryTextChanged;
base.OnDetachingFrom(entry);
}
void OnEntryTextChanged(object sender, TextChangedEventArgs args)
{
Entry entry = (Entry)sender;
IsValid = IsValidEmail(entry.Text);
}
bool IsValidEmail(string strIn)
{
if (String.IsNullOrEmpty(strIn))
return false;
try
{
// from https://msdn.microsoft.com/en-us/library/01escwtf(v=vs.110).aspx
return Regex.IsMatch(strIn,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|" +
@"[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)" +
@"(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|" +
@"(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
}
}
ValidEmailBehavior不是将Entry的Text属性设置为Red,而是定义由可绑定属性支持的IsValid属性。因为此类外部的代码设置IsValid属性没有意义,所以它是只读的可绑定属性。 Bindable.CreateReadOnly调用创建一个私有的可绑定属性密钥,该密钥由IsValid的私有集访问器中的SetValue调用使用。像往常一样,GetValue调用引用公共IsValidProperty可绑定属性。您如何使用该IsValid属性完全取决于您。例如,EmailValidationDemo程序将IsValid属性绑定到显示“拇指向上”图片的图像的IsVisible属性。 “拇指向上”位图位于另一个带有“拇指向下”的Image元素的顶部,以指示何时键入了有效的电子邮件地址。 IsValid属性也绑定到“发送”按钮的IsEnabled属性。请注意,两个数据绑定的Source都是ValidEmailBehavior对象:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:EmailValidationDemo"
xmlns:toolkit=
"clr-namespace:Xamarin.FormsBook.Toolkit;assembly=Xamarin.FormsBook.Toolkit"
x:Class="EmailValidationDemo.EmailValidationDemoPage"
Padding="20, 50">
<StackLayout>
<StackLayout Orientation="Horizontal">
<Entry Placeholder="Enter email address"
Keyboard="Email"
HorizontalOptions="FillAndExpand">
<Entry.Behaviors>
<toolkit:ValidEmailBehavior x:Name="validEmail" />
</Entry.Behaviors>
</Entry>
<Grid HeightRequest="40">
<Image Source=
"{local:ImageResource EmailValidationDemo.Images.ThumbsDown.png}" />
<Image Source="{local:ImageResource EmailValidationDemo.Images.ThumbsUp.png}"
IsVisible="{Binding Source={x:Reference validEmail},
Path=IsValid}"/>
</Grid>
</StackLayout>
<Button Text="Send!"
FontSize="Large"
HorizontalOptions="Center"
IsEnabled="{Binding Source={x:Reference validEmail},
Path=IsValid}" />
</StackLayout>
</ContentPage>
在您输入电子邮件地址时,只有至少有两个字符的顶级域名才会被视为有效:这两个位图是常见EmailValidationDemo项目的一部分。 用于引用位图的ImageResource标记扩展类在第13章“位图”中讨论过,它必须是包含位图的同一程序集的一部分:
namespace EmailValidationDemo
{
[ContentProperty ("Source")]
public class ImageResourceExtension : IMarkupExtension
{
public string Source { get; set; }
public object ProvideValue (IServiceProvider serviceProvider)
{
if (Source == null)
return null;
return ImageSource.FromResource(Source);
}
}
}
如果您在同一页面上有多个需要检查有效电子邮件地址的条目视图,该怎么办? 你可以在Style的Behaviors集合中包含ValidEmailBehavior类吗?你不能。 ValidEmailBehavior类定义名为IsValid的属性。 这意味着ValidEmailBehavior的特定实例始终具有特定状态,即此属性的值。 这具有重要意义:维护状态(例如字段或属性)的行为无法共享,这意味着它不应包含在样式中。如果需要在同一页面上对多个Entry视图使用ValidEmailBehavior,请不要将其放在样式中。 将单独的实例添加到每个Entry视图的Behaviors集合中。但是,这种IsValid属性的优点胜过缺点,因为您可以通过各种方式使用该属性。 这是一个名为EmailValidationConverter的程序,它使用IsValid属性和Xamarin.FormsBook.Toolkit库中已有的绑定转换器来在两个文本字符串之间进行选择:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit=
"clr-namespace:Xamarin.FormsBook.Toolkit;assembly=Xamarin.FormsBook.Toolkit"
x:Class="EmailValidationConverter.EmailValidationConverterPage"
Padding="50">
<StackLayout>
<StackLayout Orientation="Horizontal">
<Entry Placeholder="Enter email address"
HorizontalOptions="FillAndExpand">
<Entry.Behaviors>
<toolkit:ValidEmailBehavior x:Name="validEmail" />
</Entry.Behaviors>
</Entry>
<Label HorizontalTextAlignment="Center"
VerticalTextAlignment="Center">
<Label.Text>
<Binding Source="{x:Reference validEmail}"
Path="IsValid">
<Binding.Converter>
<toolkit:BoolToObjectConverter x:TypeArguments="x:String"
FalseObject="Not yet!"
TrueObject="OK!" />
</Binding.Converter>
</Binding>
</Label.Text>
</Label>
</StackLayout>
<Button Text="Send!"
FontSize="Large"
HorizontalOptions="Center"
IsEnabled="{Binding Source={x:Reference validEmail},
Path=IsValid}" />
</StackLayout>
</ContentPage>
BoolToObjectConverter在两个文本字符串“Not yet!”和“OK!”之间进行选择。但是,正如EmailValidationTrigger程序演示的那样,使用DataTrigger可以通过更直接的逻辑和无绑定转换器来执行相同的操作。 “Not yet!”文本被分配给Label的Text属性,而Label上的DataTrigger包含对IsValid属性的绑定以设置“OK!”文本:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit=
"clr-namespace:Xamarin.FormsBook.Toolkit;assembly=Xamarin.FormsBook.Toolkit"
x:Class="EmailValidationTrigger.EmailValidationTriggerPage"
Padding="50">
<StackLayout>
<StackLayout Orientation="Horizontal">
<Entry Placeholder="Enter email address"
HorizontalOptions="FillAndExpand">
<Entry.Behaviors>
<toolkit:ValidEmailBehavior x:Name="validEmail" />
</Entry.Behaviors>
</Entry>
<Label Text="Not yet!"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center">
<Label.Triggers>
<DataTrigger TargetType="Label"
Binding="{Binding Source={x:Reference validEmail},
Path=IsValid}"
Value="True">
<Setter Property="Text" Value="OK!" />
</DataTrigger>
</Label.Triggers>
</Label>
</StackLayout>
<Button Text="Send!"
FontSize="Large"
HorizontalOptions="Center"
IsEnabled="{Binding Source={x:Reference validEmail},
Path=IsValid}" />
</StackLayout>
</ContentPage>
引用DataTrigger中数据绑定的行为是一种强大的技术。
[转帖]C#如何使用正则表达式来校验字段串输入的系列函数
C#如何使用正则表达式来校验字段串输入的系列函数
#region 输入字段串校验系列函数 /// <summary> ///获得字符串长度 /// </summary> /// <param name="str"></param> /// <returns></returns> public static int GetStrLength(string str) { byte[] sarr = System.Text.Encoding.Default.GetBytes(str); return sarr.Length; }
/// <summary> ///返回指定长度字符串。 /// </summary> /// <param name="str">字符串</param> /// <param name="len">长度</param> /// <returns>指定长度字符串</returns> /// <remarks> /// 在文本编辑框(TextBox控件)中,一个中文汉字和一个英文字母一样都是占一位字节, /// 但是在SQL Server数据库中,存储一个中文汉字是占用两位字节,这样就可能会导致 /// 在保存文本编辑框的内容时字节被截断,保存出错。所以就需要返回指定长度的当前 ANSI 代码页的编码字符。 /// <code> /// string strTmp = txtMemo.Text; /// strTmp=SinoSofts.Common.PublicClass.GetStrEncoding(strTmp,txtMemo.MaxLength); /// txtMemo.Text=strTmp; /// </code> /// </remarks> public static string GetStrEncoding(string str,int len) { byte[] sarr = System.Text.Encoding.Default.GetBytes(str); if(sarr.Length>len && len>0) return System.Text.Encoding.Default.GetString(sarr,0,len); else return str; } /// <summary> /// //判断身份证 /// </summary> /// <param name="Cert"></param> /// <returns></returns> public static bool IsValidCert(string Cert) { return Regex.IsMatch(Cert, @"^(\d{15}|\d{17}[\dx])$"); }
//判断邮件 /*public static bool IsValidEmail(string email) { return Regex.IsMatch(email, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); }*/ /// <summary> ///判断用户名 /// </summary> /// <param name="UserName"></param> /// <returns></returns> public static bool IsValidUserName(string UserName) { return Regex.IsMatch(UserName, @"^([a-z]|[A-Z]){1}\w{0,27}$"); }
/// <summary> ///判断英文名 /// </summary> /// <param name="EnPersonName"></param> /// <returns></returns> public static bool IsValidEnPersonName(string EnPersonName) { return Regex.IsMatch(EnPersonName, @"^[a-zA-Z]{1,30}$"); }
/// <summary> /// 判断密码 /// </summary> /// <param name="PassWord"></param> /// <returns></returns> public static bool IsValidPassWord(string PassWord) { return Regex.IsMatch(PassWord, @"^(\w){6,20}$"); }
/// <summary> /// 判断电话/传真 /// </summary> /// <param name="Tel"></param> /// <returns></returns> public static bool IsValidTel(string Tel) { return Regex.IsMatch(Tel, @"^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$"); }
/// <summary> /// 判断手机 /// </summary> /// <param name="Mobil"></param> /// <returns></returns> public static bool IsValidMobil(string Mobil) { return Regex.IsMatch(Mobil, @"^(\d)+[-]?(\d){6,12}$"); }
/// <summary> /// 邮政编码 /// </summary> /// <param name="Zip"></param> /// <returns></returns> public static bool IsValidZip(string Zip) { return Regex.IsMatch(Zip, @"^[a-z0-9 ]{3,12}$"); }
/// <summary> /// 判断日期 /// </summary> /// <param name="Date"></param> /// <returns></returns> public static bool IsValidDate(string Date) { bool bValid=Regex.IsMatch(Date, @"^[12]{1}(\d){3}[-][01]?(\d){1}[-][0123]?(\d){1}$"); return (bValid && Date.CompareTo("1753-01-01")>=0);
} //判断整型 /*public static bool IsValidInt(string Int) { return Regex.IsMatch(Int, @"^[1-9]{1}[0-9]{0,6}$"); }*/
/// <summary> /// 判断只能输字母 /// </summary> /// <param name="EnName"></param> /// <returns></returns> public static bool IsValidEnName(string EnName) { return Regex.IsMatch(EnName, @"[a-zA-Z]"); } #endregion
文章
C# · 数据安全/隐私保护 · 存储 · 数据库 · SQL
2006-08-13
浅谈在ASP.NET中数据有效性校验的方法
作为一名程序员,一定要对自己编写的程序的健壮性负责,因此数据的校验无论在商业逻辑还是系统实现都是必不可少的部分。
我这里总结了一种自认为比较不错的asp.net(C#)的数据校验方法,如大家探讨。
主要用Regex的IsMatch方法,在BusinessRule层进行校验数据的有效性,并将校验的方法作为BusinessRule层基类的一部分。
在WebUI层现实提示信息。
usingSystem;usingSystem.Data;usingSystem.Text.RegularExpressions;namespaceEducation.BusinessRules{///<summary>///商业规则层的基类///</summary>publicclassBizObject{publicconstStringREGEXP_IS_VALID_EMAIL=@"^/w+((-/w+)|(/./w+))*/@/w+((/.|-)/w+)*/./w+$";//电子邮件校验常量publicconstStringREGEXP_IS_VALID_URL=@"^http://([/w-]+/.)+[/w-]+(/[/w-./?%&=]*)?";//网址校验常量publicconstStringREGEXP_IS_VALID_ZIP=@"/d{6}";//邮编校验常量publicconstStringREGEXP_IS_VALID_SSN=@"/d{18}|/d{15}";//身份证校验常量publicconstStringREGEXP_IS_VALID_INT=@"^/d{1,}$";//整数校验常量publicconstStringREGEXP_IS_VALID_DEMICAL=@"^-?(0|/d+)(/./d+)?$";//数值校验常量"//日期校验常量publicconstStringREGEXP_IS_VALID_DATE=@"^(?:(?:(?:(?:1[6-9]|[2-9]/d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(//|-|/.)(?:0?2/1(?:29))$)|(?:(?:1[6-9]|[2-9]/d)?/d{2})(//|-|/.)(?:(?:(?:0?[13578]|1[02])/2(?:31))|(?:(?:0?[1,3-9]|1[0-2])/2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))/2(?:0?[1-9]|1/d|2[0-8]))$";
publicBizObject(){}
#region校验字段是否为空或字段长度超长方法
publicstringGetFieldTooLongError(stringErrorField,intmaxlen){returnErrorField+"信息超长,请删减至"+maxlen.ToString()+"个字符!";}
publicstringGetFieldNullError(stringErrorField){returnErrorField+"是必填项,不允许为空!";}
publicboolIsValidField(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull){inti=(short)(Row[fieldName].ToString().Trim().Length);
if(i<1&&(!AllowNull)){Row.SetColumnError(fieldName,GetFieldNullError(ErrorField));returnfalse;}elseif(i>maxLen){Row.SetColumnError(fieldName,GetFieldTooLongError(ErrorField,maxLen));returnfalse;}returntrue;}#endregion
#region校验电子邮件类型字段格式方法
publicstringGetEmailFieldError(stringErrorField){returnErrorField+"格式不正确(a@b.c)!";}publicboolIsValidEmail(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull){inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid){isValid=(newRegex(REGEXP_IS_VALID_EMAIL)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0)){Row.SetColumnError(fieldName,GetEmailFieldError(ErrorField));returnfalse;}}returntrue;}#endregion
#region校验邮编类型字段格式方法
publicstringGetZipFieldError(stringErrorField){returnErrorField+"格式不正确(157032)!";}publicboolIsValidZip(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull){inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid){isValid=(newRegex(REGEXP_IS_VALID_ZIP)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0)){Row.SetColumnError(fieldName,GetZipFieldError(ErrorField));returnfalse;}}returntrue;}#endregion
#region校验身份证类型字段格式方法
publicstringGetSSNFieldError(stringErrorField){returnErrorField+"格式不正确(长度为15或18位)!";}publicboolIsValidSSN(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull){inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid){isValid=(newRegex(REGEXP_IS_VALID_SSN)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0)){Row.SetColumnError(fieldName,GetSSNFieldError(ErrorField));returnfalse;}}returntrue;}#endregion
#region校验网址类型字段格式方法
publicstringGetUrlFieldError(stringErrorField){returnErrorField+"格式不正确(}publicboolIsValidUrl(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull){inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid){isValid=(newRegex(REGEXP_IS_VALID_URL)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0)){Row.SetColumnError(fieldName,GetUrlFieldError(ErrorField));returnfalse;}}returntrue;}#endregion
#region校验日期类型字段格式方法
publicstringGetDateFieldError(stringErrorField){returnErrorField+"日期格式不正确!";}publicboolIsValidDate(DataRowRow,StringfieldName,intmaxLen,stringErrorField,boolAllowNull){inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=IsValidField(Row,fieldName,maxLen,ErrorField,AllowNull);
if(isValid){isValid=(newRegex(REGEXP_IS_VALID_DATE)).IsMatch(Row[fieldName].ToString());
if((!isValid)&&(i>0)){Row.SetColumnError(fieldName,GetDateFieldError(ErrorField));returnfalse;}}returntrue;}#endregion
#region校验数值类型字段格式方法//这也是个判断数值的办法privateboolIsNumeric(stringValue){try{inti=int.Parse(Value);returntrue;}catch{returnfalse;}}
publicstringGetFieldNumberError(stringErrorField){returnErrorField+"必须是数字(例如:90)!";}
publicboolIsValidNumber(DataRowRow,StringfieldName,stringErrorField,boolAllowNull){inti=(short)(Row[fieldName].ToString().Trim().Length);
boolisValid=(newRegex(REGEXP_IS_VALID_DEMICAL)).IsMatch(Row[fieldName].ToString());
if(i<1&&(!AllowNull)){Row.SetColumnError(fieldName,GetFieldNullError(ErrorField));returnfalse;}elseif((!isValid)&&(i>0)){Row.SetColumnError(fieldName,GetFieldNumberError(ErrorField));returnfalse;}returntrue;}#endregion
}}
//在继承了基类的BusinessRule中使用校验的方法///<summary>///使用上面的方法对数据进行有效性校验///</summary>///<paramname="Row">数据行</param>///<returns>通过--true不通过--false</returns>publicboolValidate(DataRowRow){boolisValid;Row.ClearErrors();isValid=IsValidField(Row,"name",20,"姓名",false);isValid&=IsValidZip(Row,"zip",6,"邮编",true);isValid&=IsValidNumber(Row,"age","年龄",false);isValid&=IsValidEmail(Row,"email",50,"电子邮件",true);returnisValid;}
//在WebUI中显示错误提示信息///<summary>///显示提交数据返回的错误信息///</summary>privatevoidDisplayErrors(){StringfieldErrors="";StringtmpfieldErrors="";
DataRowRow=ds.Tables[0].Rows[0];
foreach(DataColumnColumninds.Tables[0].Columns){tmpfieldErrors=Row.GetColumnError(Column.ColumnName.ToString());if(tmpfieldErrors!=""){fieldErrors+="<li>"+tmpfieldErrors+"<br>";}}//显示错误信息this.lblError.Text=fieldErrors;}
="MAILTO:A@B.C">
Java正则表达式
正则表达式通常处理方式:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
或者:System.out.println("abc".matches("..."));//String类中有match()方法
正则表达式规则如下,更多请参考java的Pattern类的详细介绍。
构造 匹配
字符
x 字符 x
\\ 反斜线字符
\0n 带有八进制值 0 的字符 n (0 <= n <= 7)
\0nn 带有八进制值 0 的字符 nn (0 <= n <= 7)
\0mnn 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 带有十六进制值 0x 的字符 hh
\uhhhh 带有十六进制值 0x 的字符 hhhh
\t 制表符 ('\u0009')
\n 新行(换行)符 ('\u000A')
\r 回车符 ('\u000D')
\f 换页符 ('\u000C')
\a 报警 (bell) 符 ('\u0007')
\e 转义符 ('\u001B')
\cx 对应于 x 的控制符
字符类
[abc] a、b 或 c(简单类) 【注意】非"abc",而是"[abc]"
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
POSIX 字符类(仅 US-ASCII)
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
\p{ASCII} 所有 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十进制数字:[0-9]
\p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}]
\p{Punct} 标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或制表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{XDigit} 十六进制数字:[0-9a-fA-F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]
java.lang.Character 类(简单的 java 字符类型)
\p{javaLowerCase} 等效于 java.lang.Character.isLowerCase()
\p{javaUpperCase} 等效于 java.lang.Character.isUpperCase()
\p{javaWhitespace} 等效于 java.lang.Character.isWhitespace()
\p{javaMirrored} 等效于 java.lang.Character.isMirrored()
Unicode 块和类别的类
\p{InGreek} Greek 块(简单块)中的字符
\p{Lu} 大写字母(简单类别)
\p{Sc} 货币符号
\P{InGreek} 所有字符,Greek 块中的除外(否定)
[\p{L}&&[^\p{Lu}]] 所有字母,大写字母除外(减去)
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超过 m 次
Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超过 m 次
Logical 运算符
XY X 后跟 Y
X|Y X 或 Y
(X) X,作为捕获组
Back 引用
\n 任何匹配的 nth 捕获组
引用
\ Nothing,但是引用以下字符
\Q Nothing,但是引用所有字符,直到 \E
\E Nothing,但是结束从 \Q 开始的引用
特殊构造(非捕获)
(?:X) X,作为非捕获组
(?idmsux-idmsux) Nothing,但是将匹配标志i d m s u x on - off
(?idmsux-idmsux:X) X,作为带有给定标志 i d m s u x on - off
的非捕获组 (?=X) X,通过零宽度的正 lookahead
(?!X) X,通过零宽度的负 lookahead
(?<=X) X,通过零宽度的正 lookbehind
(?<!X) X,通过零宽度的负 lookbehind
(?>X) X,作为独立的非捕获组
场景1:将所有数字用'-'替换
String s = "abc123def456hijas2kj23jl1";
String dest = s.replaceAll("\\d", "-");
System.out.println(dest);
场景2:判断是否是电子邮箱
String s = "tianya@sina.com";
System.out.println(s.matches(".+@.+\\..+"));
【注】\\.代表'.',表示真正的‘点’号,否则会代表‘任意字符’
场景3:
邮箱验证: String regEmail = "^(?:\\w+\\.{1})*\\w+@(\\w+\\.)*\\w+$";
ip 地址的验证: String reIp = "\\b((\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])(\\b|\\.)){4}";
验证日期: String reDate = "(?:[1-9]|0[1-9]|[12]\\d|3[0-1])(\\/|\\-)(?:[1-9]|0[1-9]|1[0-2])(\\/|\\-)(?:19|20\\d\\d)";
验证信用卡号:String reCard = "^(4\\d{12}(?:\\d{3})?)$";
测试:
String email = "qing.qingbyqing@gmail.vip.com";//邮箱测试
FormValid.isValidEmail(email);
String strIp="1.10.111.255";//IP地址测试
FormValid.isValidIp(strIp);
String sDate="03/03/1911";
FormValid.isValidDate(sDate);//日期测试
String strNum = "4432123456788881";
w(FormValid.isValidCard(strNum));//信用卡测试
本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/673756,如需转载请自行联系原作者
利用正则表达式 进行字符的判断
using System;
using System.Text.RegularExpressions;
using System.Net;
namespace 正则表达式检测字符串
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入字符串:");
string s = Console.ReadLine();
if (GF_IsOk.IsExistHanZi(s))
{
Console.Write("包含汉字");
}
else
{
Console.Write("不包含汉字");
}
Console.ReadLine();
}
}
//判断部分
public class GF_IsOk
{
/// <summary>
/// 判读是否是IP地址
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public static bool IsIPStr(string in_str)
{
IPAddress ip;
return IPAddress.TryParse(in_str, out ip);
}
/// <summary>
/// 判断是否是数字
/// </summary>
/// <param name="strNumber"></param>
/// <returns></returns>
public static bool IsNumber(string strNumber)
{
Regex objNotNumberPattern = new Regex("[^0-9.-]");
Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*");
Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*");
String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";
String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$";
Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")");
return !objNotNumberPattern.IsMatch(strNumber) &&
!objTwoDotPattern.IsMatch(strNumber) &&
!objTwoMinusPattern.IsMatch(strNumber) &&
objNumberPattern.IsMatch(strNumber);
}
/// <summary>
/// 判断是否是日期字符串
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public static bool IsDateStr_yyyymmdd(string in_str)
{
if (in_str == "") return true;
if (in_str.Length != 8) return false;
return IsDateStr(in_str);
}
/// <summary>
/// 判断是否是日期字符串
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public static bool IsDateStr(string in_str)
{
if (in_str == "") return true;
if (in_str.Length == 8)
in_str = in_str.Substring(0, 4) + "-" + in_str.Substring(4, 2) + "-" + in_str.Substring(6, 2);
DateTime dtDate;
bool bValid = true;
try
{
dtDate = DateTime.Parse(in_str);
}
catch (FormatException)
{
// 如果解析方法失败则表示不是日期性数据
bValid = false;
}
return bValid;
}
/// <summary>
/// 判断字符串中是否包含汉字,有返回true 否则为false
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsExistHanZi(string str)
{
Regex reg = new Regex(@"[\u4e00-\u9fa5]");//正则表达式
if (reg.IsMatch(str))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 字段串是否为Null或为""(空)
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsStrNullOrEmpty(string str)
{
if (str == null || str.Trim() == string.Empty)
return true;
return false;
}
/// <summary>
/// 返回文件是否存在
/// </summary>
/// <param name="filename">文件名</param>
/// <returns>是否存在</returns>
public static bool IsFileExists(string filename)
{
return System.IO.File.Exists(filename);
}
/// <summary>
/// 检测是否符合email格式
/// </summary>
/// <param name="strEmail">要判断的email字符串</param>
/// <returns>判断结果</returns>
public static bool IsValidEmail(string strEmail)
{
return Regex.IsMatch(strEmail, @"^[\w\.]+([-]\w+)*@[A-Za-z0-9-_]+[\.][A-Za-z0-9-_]");
}
public static bool IsValidDoEmail(string strEmail)
{
return Regex.IsMatch(strEmail, @"^@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
/// <summary>
/// 检测是否是正确的Url
/// </summary>
/// <param name="strUrl">要验证的Url</param>
/// <returns>判断结果</returns>
public static bool IsURL(string strUrl)
{
return Regex.IsMatch(strUrl, @"^(http|https)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{1,10}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$");
}
/// <summary>
/// 判断是否为base64字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsBase64String(string str)
{
//A-Z, a-z, 0-9, +, /, =
return Regex.IsMatch(str, @"[A-Za-z0-9\+\/\=]");
}
/// <summary>
/// 检测是否有Sql危险字符
/// </summary>
/// <param name="str">要判断字符串</param>
/// <returns>判断结果</returns>
public static bool IsSafeSqlString(string str)
{
return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
}
}
}
本文转自蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366618,如需转载请自行联系原作者
利用正则表达式 进行字符的判断
using System;
using System.Text.RegularExpressions;
using System.Net;
namespace 正则表达式检测字符串
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入字符串:");
string s = Console.ReadLine();
if (GF_IsOk.IsExistHanZi(s))
{
Console.Write("包含汉字");
}
else
{
Console.Write("不包含汉字");
}
Console.ReadLine();
}
}
//判断部分
public class GF_IsOk
{
/// <summary>
/// 判读是否是IP地址
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public static bool IsIPStr(string in_str)
{
IPAddress ip;
return IPAddress.TryParse(in_str, out ip);
}
/// <summary>
/// 判断是否是数字
/// </summary>
/// <param name="strNumber"></param>
/// <returns></returns>
public static bool IsNumber(string strNumber)
{
Regex objNotNumberPattern = new Regex("[^0-9.-]");
Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*");
Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*");
String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";
String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$";
Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")");
return !objNotNumberPattern.IsMatch(strNumber) &&
!objTwoDotPattern.IsMatch(strNumber) &&
!objTwoMinusPattern.IsMatch(strNumber) &&
objNumberPattern.IsMatch(strNumber);
}
/// <summary>
/// 判断是否是日期字符串
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public static bool IsDateStr_yyyymmdd(string in_str)
{
if (in_str == "") return true;
if (in_str.Length != 8) return false;
return IsDateStr(in_str);
}
/// <summary>
/// 判断是否是日期字符串
/// </summary>
/// <param name="in_str"></param>
/// <returns></returns>
public static bool IsDateStr(string in_str)
{
if (in_str == "") return true;
if (in_str.Length == 8)
in_str = in_str.Substring(0, 4) + "-" + in_str.Substring(4, 2) + "-" + in_str.Substring(6, 2);
DateTime dtDate;
bool bValid = true;
try
{
dtDate = DateTime.Parse(in_str);
}
catch (FormatException)
{
// 如果解析方法失败则表示不是日期性数据
bValid = false;
}
return bValid;
}
/// <summary>
/// 判断字符串中是否包含汉字,有返回true 否则为false
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsExistHanZi(string str)
{
Regex reg = new Regex(@"[\u4e00-\u9fa5]");//正则表达式
if (reg.IsMatch(str))
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 字段串是否为Null或为""(空)
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsStrNullOrEmpty(string str)
{
if (str == null || str.Trim() == string.Empty)
return true;
return false;
}
/// <summary>
/// 返回文件是否存在
/// </summary>
/// <param name="filename">文件名</param>
/// <returns>是否存在</returns>
public static bool IsFileExists(string filename)
{
return System.IO.File.Exists(filename);
}
/// <summary>
/// 检测是否符合email格式
/// </summary>
/// <param name="strEmail">要判断的email字符串</param>
/// <returns>判断结果</returns>
public static bool IsValidEmail(string strEmail)
{
return Regex.IsMatch(strEmail, @"^[\w\.]+([-]\w+)*@[A-Za-z0-9-_]+[\.][A-Za-z0-9-_]");
}
public static bool IsValidDoEmail(string strEmail)
{
return Regex.IsMatch(strEmail, @"^@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
}
/// <summary>
/// 检测是否是正确的Url
/// </summary>
/// <param name="strUrl">要验证的Url</param>
/// <returns>判断结果</returns>
public static bool IsURL(string strUrl)
{
return Regex.IsMatch(strUrl, @"^(http|https)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{1,10}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$");
}
/// <summary>
/// 判断是否为base64字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool IsBase64String(string str)
{
//A-Z, a-z, 0-9, +, /, =
return Regex.IsMatch(str, @"[A-Za-z0-9\+\/\=]");
}
/// <summary>
/// 检测是否有Sql危险字符
/// </summary>
/// <param name="str">要判断字符串</param>
/// <returns>判断结果</returns>
public static bool IsSafeSqlString(string str)
{
return !Regex.IsMatch(str, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']");
}
}
}