Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用正则表达式验证用户名_Javascript_Regex - Fatal编程技术网

在javascript中使用正则表达式验证用户名

在javascript中使用正则表达式验证用户名,javascript,regex,Javascript,Regex,我是regex的新手,希望创建一个正则表达式来检查用户名这些是条件: 用户名必须包含4到20个字符 用户名只能包含字母a-z、数字0-9和特殊字符-_ 为避免混淆,不得连续使用特殊字符-.u 用户名不能包含空格 示例 any.user.13=>有效 any..user13=>无效(连续两个点) anyuser=>有效 any=>无效(太短) AnyUserhasAsupersuperLongName=>无效(字符太多) 任何用户名=>都因空格而无效 我尝试创建自己的正则表达式,但只指定了允许

我是regex的新手,希望创建一个正则表达式来检查用户名这些是条件:

  • 用户名必须包含4到20个字符
  • 用户名只能包含字母a-z、数字0-9和特殊字符-_
  • 为避免混淆,不得连续使用特殊字符-.u
  • 用户名不能包含空格
  • 示例

    • any.user.13=>有效
    • any..user13=>无效(连续两个点)
    • anyuser=>有效
    • any=>无效(太短)
    • AnyUserhasAsupersuperLongName=>无效(字符太多)
    • 任何用户名=>都因空格而无效
    我尝试创建自己的正则表达式,但只指定了允许的字符:

    [a-z0-9.-_]{4,20}
    
    不幸的是,如果中间有空格,它仍然匹配字符串,并且可能有两个特殊字符。-\uu依次:

    如果有人能在这个问题上为我提供帮助,我将不胜感激。请记住,我是一个regex的新手,还在学习。因此,解释一下你的正则表达式就好了


    提前感谢:)

    有时编写正则表达式几乎和查找用户名一样困难。但在这里,你离成功很近。我可以指出你的尝试失败的三个原因

    首先,我们需要匹配所有输入字符串,而不仅仅是其中的一部分,因为我们不想忽略输入中出现的空格和其他字符。为此,通常将分别使用锚点
    ^
    (匹配开始)和
    $
    (匹配结束)

    另一点是,我们需要防止两个特殊字符相邻出现。这最好是用消极的前瞻来完成

    最后,我可以看到您用来测试正则表达式的工具添加了标志
    gmi
    ,这不是我们想要的。特别是,
    i
    标志表示regex应该不区分大小写,因此它应该像小字母一样匹配大写字母。把那面旗子移开

    最后的正则表达式如下所示:

    /^([a-z0-9]|[-.[u](?![-.[u]){4,20}$/


    这里没有什么真正神秘的东西,除了组
    [-.\u](?![-.\ u])
    这意味着任何
    -.\u
    后面没有任何
    -.\u

    有时编写正则表达式几乎和查找用户名一样具有挑战性。但在这里,你离成功很近。我可以指出你的尝试失败的三个原因

    首先,我们需要匹配所有输入字符串,而不仅仅是其中的一部分,因为我们不想忽略输入中出现的空格和其他字符。为此,通常将分别使用锚点
    ^
    (匹配开始)和
    $
    (匹配结束)

    另一点是,我们需要防止两个特殊字符相邻出现。这最好是用消极的前瞻来完成

    最后,我可以看到您用来测试正则表达式的工具添加了标志
    gmi
    ,这不是我们想要的。特别是,
    i
    标志表示regex应该不区分大小写,因此它应该像小字母一样匹配大写字母。把那面旗子移开

    最后的正则表达式如下所示:

    /^([a-z0-9]|[-.[u](?![-.[u]){4,20}$/


    这里没有什么真正神秘的东西,除了组
    [-.\u](?![-.\ u])
    这意味着任何
    -.\u
    后面都没有任何
    -.\u

    如果您提供一个规则列表,然后逐个进行测试,这是最简单的。通过使用这种方法,您可以让用户知道他违反了哪些规则。我选择了一种方法,向用户显示一条消息,指定用户名无效的原因。使用ifs进行这样的检查是乏味的……严肃的问题:为什么要对用户名设置所有这些限制?除了可能的最大长度(因为varchar也不应该特别重要),对于所有这些限制,您有什么真正的原因?(例如,你显示用户名的代码不应该在意。它可能会切断用户名,但你应该简单地告诉人们,当他们注册时。“选择长用户名意味着人们看不到全部”)@Mike'Pomax'Kamermans,因为这样做是常见的做法。例如,根据使用的字体,用户无法识别我的用户名有两个下划线。此外,这些规则阻止用户创建用户名,例如“其他人这样做”不是真正的原因。很多网站都这样做,这对用户来说是一件痛苦的事(如果有人想要用户名
    \uuuu
    ,那么只要你的前端清楚什么是用户名,什么不是用户名,用户名就没有问题,记住这一点很重要。想要限制它是可以的,但许多“常规做法”都是基于几十年前的技术限制,实际上,如果你正在写新的东西,这些限制都不适用。如果你提供一个规则列表,然后逐一测试,这是最简单的。通过使用这种方法,您可以让用户知道他违反了哪些规则。我选择了一种方法,向用户显示一条消息,指定用户名无效的原因。使用ifs进行这样的检查是乏味的……严肃的问题:为什么要对用户名设置所有这些限制?除了可能的最大长度(因为varchar也不应该特别重要),对于所有这些限制,您有什么真正的原因?(例如,你显示用户名的代码不应该在意。它可能会切断用户名,但你应该在人们注册时简单地告诉他们。)