【问题标题】:Regex pattern for username validation用于用户名验证的正则表达式模式
【发布时间】:2021-10-29 15:47:56
【问题描述】:

我正在尝试组合一个正则表达式模式来验证我们的帐户创建 PS 脚本中的用户名。我们用户名的格式是 FirstName.LastName。我们也接受连字符、撇号和数字,但仅限如下:

名字 - 仅限字母、连字符、撇号也可以。

LastName - 接受字母数字,也接受连字符和撇号。

下面的正则表达式似乎有效,但如果用户名以撇号/连字符开头或结尾则无效,因为它们是有效字符。

"^[a-zA-Z]+-*'*[a-zA-Z]+\.[a-zA-Z]+-*'*[0-9a-zA-Z]+$"

如果字符串以撇号或连字符开头或结尾,我将如何修改上述内容以确保字符串不匹配?我还想在名字部分和姓氏中将连字符和撇号限制为仅连续 1 个(例如“sh-aun”而不是“sha--un”、“sh'aun”而不是“sh''aun”)部分。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: regex powershell


    【解决方案1】:
    • PowerShell 的正则表达式匹配默认情况下是不区分大小写的,因此[a-z] 足以匹配小写和大写字母。

    • [a-z] 仅匹配 ASCII(非重音)字母;要也允许重音字母,请改用\p{L}

    允许多个 -' 每个名字和姓氏(但不能在开头和结尾,也不能连续):

    "^[a-z]+(?:[-'][a-z]+)*\.[a-z]+(?:[-'][a-z0-9]+)*$"
    
    • 有关此正则表达式的说明和交互实验,请参阅this regex101.com page

    • 例子:

      # -> $true
      "shaun.o'brien-Thompson" -match "^[a-z]+(?:[-'][a-z]+)*\.[a-z]+(?:[-'][a-z0-9]+)*$"
      

    要只允许一个(内部)- ',请将* 替换为?

    "^[a-z]+(?:[-'][a-z]+)?\.[a-z]+(?:[-'][a-z0-9]+)?$"
    

    【讨论】:

      【解决方案2】:

      您在第一个字符集中同时使用连字符和撇号,它允许它匹配以这些字符开头的单词。以下应该可以工作

      ^[a-zA-Z]+-?'?[a-zA-Z]+\.[0-9a-zA-Z]+-?'?[a-zA-Z]+$
      

      ? 允许引擎匹配前一个令牌的零次或一次出现

      【讨论】:

        猜你喜欢
        • 2011-06-09
        • 2021-09-06
        • 2020-10-09
        • 2012-08-14
        • 2011-10-10
        • 2021-02-26
        • 1970-01-01
        • 2017-10-04
        相关资源
        最近更新 更多