如何:正则表达式从2到150长度之间的数字/字母开始

时间:2018-06-12 00:17:43

标签: c# regex

我一直在学习正则表达式,并且在提出模式方面遇到了一些麻烦。

要求是它必须以字母,数字,#或@开头。 在第一个字符之后它可以包含任何字母,数字,#,@, - 或。 它的长度必须至少为2,且不得超过150.它不能以空格开头,但可以在2-150的任何位置都有空格。 (如果您认为基于0,则为0-149)

我的测试用例是

9 Times

我正在测试的完整模式是:

^[\dA-Za-z-.@#]{2,150}$

这些案例起作用:

MichaelTest
9MichaelTest
#MichaelTest
@MichaelTest

任何有空格的东西都无效

如9次

我开始看到问题是空间......我如何允许空间,而不是第一个角色? (感谢TheGeneral提示)

谢谢! 微米。

3 个答案:

答案 0 :(得分:2)

尝试正则表达式:^[\dA-Za-z@#][\dA-Za-z@#. -]{1,149}$

Demo

说明: 第一个字符是\dA-Za-z@#中的任何一个字符 接着是至少1到最多149个\dA-Za-z@#. -的字符,使总字符数至少为2,最多为150。

答案 1 :(得分:1)

这对你有用:

@"^[a-zA-Z\d#@][a-zA-Z\d#@\-\. ]{1,149}$"

可以使用变量和字符串插值来构建它:

var start = @"a-zA-Z\d#@";
var then = start + @"\-\. ";
var regex = new Regex($@"[{start}][{then}]{{1,149}}");

测试

这是a little program with which to test

using System;
using System.Text;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        var start = @"a-zA-Z\d#@";
        var then = start + @"\-\. ";
        var regex = new Regex($@"[{start}][{then}]{{1,149}}");
        Test(regex);
    }

    public static void Test(Regex regex)
    {
        const int numTests = 10;
        const int stringLength = 150;
        var rand = new Random();
        var start = new string[]{"1", "a", "#", "@", };
        var then = new string[]{"1", "a", "#", "@", "-", ".", " "};
        for (var i = 0; i < numTests; ++i)
        {
            var builder = new StringBuilder(start[0]);
            for (var j = 1; j < stringLength; ++j)
            {
                var r = rand.Next() % then.Length;
                builder.Append(then[r]);
            }

            var test = builder.ToString();
            Console.WriteLine($"{test} {regex.IsMatch(test)}");
        }
    }
}

答案 2 :(得分:0)

  

必须以字母,数字,#或@

开头

这是

^[A-Za-z0-9@#]

之后,你应该检查一个可以包含空格的模式,任何其他列出的字符字符,直到limit-1(因为你已经检查了一个起始字符),然后用{锚定{1}}

$

然后,把它们粘在一起