我一直在学习正则表达式,并且在提出模式方面遇到了一些麻烦。
要求是它必须以字母,数字,#或@开头。 在第一个字符之后它可以包含任何字母,数字,#,@, - 或。 它的长度必须至少为2,且不得超过150.它不能以空格开头,但可以在2-150的任何位置都有空格。 (如果您认为基于0,则为0-149)
我的测试用例是
9 Times
我正在测试的完整模式是:
^[\dA-Za-z-.@#]{2,150}$
这些案例起作用:
MichaelTest
9MichaelTest
#MichaelTest
@MichaelTest
任何有空格的东西都无效
如9次
我开始看到问题是空间......我如何允许空间,而不是第一个角色? (感谢TheGeneral提示)
谢谢! 微米。
答案 0 :(得分:2)
尝试正则表达式:^[\dA-Za-z@#][\dA-Za-z@#. -]{1,149}$
说明:
第一个字符是\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}}
$
然后,把它们粘在一起