如何在c#中使用Regex用于以下情况

时间:2014-07-15 11:25:48

标签: c# regex

我有一个文本框,当用户尝试输入单词时,格式应该只以'PHY'开头,后跟8位数字。

例如,

正确的格式为PHY00000000

在这里,前三个字母'PHY'是常数,接下来的8位数字从00000000到10000000不等。

如何使用正则表达式条件获取此格式?不应该支持其他格式。

2 个答案:

答案 0 :(得分:2)

如果您希望正则表达式的值从PHY00000000PHY10000000,则应使用:

PHY[0-1]\d{7}

但我不喜欢这个,因为我们试图用正则表达式解释数字的值。我会用它们来分割这个输入并将其解释为具有指定范围的数字(然后你可以轻松地改变这个有效的数字范围):

static bool Valid(string input)
{
    const string Pattern = @"PHY(\d{8})";
    const int Max = 10000000;

    var match = Regex.Match(input, Pattern);
    if (match.Success)
    {
        int value = int.Parse(match.Groups[1].Value);
        if (value <= Max)
        {
            return true;
        }
    }
    return false;
}

因此,您可以从某些配置中获取PatternMax等。

答案 1 :(得分:1)

为了满足要求,以下正则表达式将起作用:

const string match = "PHY(0\d{7}|1(0){7})";

然后,您可以通过一种简单的方法验证输入:

bool ValidateInput(string input)
{
    var regex = new Regex(match);
    return regex.IsMatch(input);
}