在C#中使用其他方法的正则表达式

时间:2015-08-18 12:06:14

标签: c# .net regex methods

我将我的RegularExpression()方法与包含所有if语句的validate()方法分开。如果它像这样分开,我如何使用我的正则表达式代码?我对编程很新,我还在学习如何使用方法,请提供一个例子。

 public void Validate()
    {

        RegularExpression();

      if (PhoneNumber_Regex.IsMatch(PhonNumb_txBox.Text) == false) 
            {
                MessageBox.Show("Invalid cellphone number");
            }

      if (Email_Regex.IsMatch(Email_txBox.Text) == false) 
            {
                MessageBox.Show("Invalid E-Mail");
            }
    }

 public RegularExpression(object PhoneNumber_Regex)
    {
       var PhoneNumber_Regex = new Regex(@"^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$");

       var Email_Regex = new Regex(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$.");

    }

4 个答案:

答案 0 :(得分:5)

添加一个静态类,您将在其中声明正则表达式:

public static class MyRegexps
{
    public static readonly Regex PhoneNumber_Regex = new Regex(@"^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$");
    public static readonly Regex Email_Regex = new Regex(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$.");
}

然后在你的调用方法中使用它们:

if (MyRegexps.PhoneNumber_Regex.IsMatch(PhonNumb_txBox.Text) == false) 
{
    MessageBox.Show("Invalid cellphone number");
}

答案 1 :(得分:1)

public RegularExpression(object PhoneNumber_Regex)
{
   var PhoneNumber_Regex = new Regex(@"^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$");

   var Email_Regex = new Regex(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$.");

}

您声明了2个变量 - 但是范围意味着那些变量在该调用之外不存在,因此,它们不可用。

但是,如果您作为课程的一部分宣布了

readonly Regex Email_Regex = new Regex(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$.");

所以你有一个只读变量,你可以像你认为的那样使用该类中的任何函数的一部分

  if (Email_Regex.IsMatch(Email_txBox.Text) == false) 
  {
      MessageBox.Show("Invalid cellphone number");
  }

答案 2 :(得分:0)

应该在这条线上做点什么。

public static class MyValidator
{
  protected static PhoneNumberRegex = new Regex(@"^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$");
  protected static EmailRegex = new Regex(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$.");  

  public static bool ValidatePhoneNumber(string strToMatch)
  {
    return PhoneNumberRegex.IsMatch(strToMatch);
  }

  public static bool ValidateEmail(string strToMatch)
  {
    return EmailRegex.IsMatch(strToMatch);
  }
}

然后像这样使用它

if (!MyValidator.ValidatePhoneNumber(PhonNumb_txBox.Text)) 
{
    MessageBox.Show("Invalid cellphone number");
}

答案 3 :(得分:0)

  1. 虽然它不是在方法之间分享内容的唯一方法,但在这种特殊情况下,使用类级成员是有意义的。
  2. 您的正则表达式本身不太可能发生变化,可能是static
  3. 在构造函数中初始化它们,因此它是自动的,而不必手动调用初始化程序。
  4. 这一切加起来更像这样:

    public class MyClass
    {
        private static Regex PhoneNumber_Regex { get; set; }
        private static Regex Email_Regex { get; set; }
    
        static MyClass
        {
            PhoneNumber_Regex = new Regex(@"^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$");
            Email_Regex = new Regex(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$.");
        }
    
        public void Validate()
        {
            if (!PhoneNumber_Regex.IsMatch(PhonNumb_txBox.Text)) 
                MessageBox.Show("Invalid cellphone number");
            if (!Email_Regex.IsMatch(Email_txBox.Text)) 
                MessageBox.Show("Invalid E-Mail");
        }
    }