合并 3 个正则表达式以进行 Slug/URL 验证检查

Merging 3 Regular Expressions to make a Slug/URL validation check

我正在尝试将一些有效的 RegEx 模式合并在一起(以及它们)。我不认为我这样做是正确的,此外,第一个 RegEx 可能会妨碍接下来的两个。

Slug 示例(除 -_ 外没有特殊字符):

(^[a-z0-9-_]+$)

然后我想确保第一个字符不是 -_:

(^[^-_])

然后我想确保最后一个字符不是 -_:

([^-_]$)

匹配(好的别名):

不匹配(别名错误)

如果这个RegExp可以简化,我很乐意使用它。我正在尝试在用户可以提供的页面 URL 上创建验证,我正在寻找用户:

一旦我成功了,我可以根据需要调整其他角色。

最后我像这样作为 Annotation 申请我的模型:

[RegularExpression(
    @"(^[a-z0-9-_]+$)?(^[^-_])?([^-_]$)", 
    ErrorMessage = "Alias is not valid")
]

谢谢,如果我需要提供更多信息,请告诉我。

See regex in use here

^[a-z\d](?:[a-z\d_-]*[a-z\d])?$
  • ^ 在行首声明位置
  • [a-z\d] 匹配任何小写 ASCII 字母或数字
  • (?:[a-z\d_-]*[a-z\d])? 可选匹配以下
    • [a-z\d_-]* 匹配集合中任意字符任意次数
    • [a-z\d] 匹配任何小写 ASCII 字母或数字
  • $ 断言行尾的位置

See code in use here

使用系统; 使用 System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        Regex regex = new Regex(@"^[a-z\d](?:[a-z\d_-]*[a-z\d])?$");
        string[] strings = {"my-new_page", "pagename", "-my-new-page", "my-new-page_", "!@#$%^&*()"};

        foreach(string s in strings) {
                if (regex.IsMatch(s))
                {
                    Console.WriteLine(s);
                }
        }
    }
}

结果(仅正匹配):

my-new_page
pagename