Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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,我需要一个JavaScript正则表达式作为名字,并满足以下要求: 没有数字,以下字符无效:~`?(!^*;ˆ;@=$%{}[]\/\\”, 不应超过3个单词 没有前面或后面的空格 最少2个字符 我使用了两个单独的正则表达式: 第一个是:对于无数字和无效字符: ^[A-Za-z][^\d~`?!^*¨ˆ;@=$%{}\[\]\|\\\/<>#“.,]*$ 我需要一个正则表达式来处理上述所有4个条件(或者至少3个,因为我们可以为第4个条件设置最小长度条件)。我认为您应该定义一组可用字

我需要一个JavaScript正则表达式作为名字,并满足以下要求:

  • 没有数字,以下字符无效:
    ~`?(!^*;ˆ;@=$%{}[]\/\\”,
  • 不应超过3个单词
  • 没有前面或后面的空格
  • 最少2个字符
  • 我使用了两个单独的正则表达式: 第一个是:对于无数字和无效字符:

    ^[A-Za-z][^\d~`?!^*¨ˆ;@=$%{}\[\]\|\\\/<>#“.,]*$
    

    我需要一个正则表达式来处理上述所有4个条件(或者至少3个,因为我们可以为第4个条件设置最小长度条件)。

    我认为您应该定义一组可用字符。为简单起见,假设:

    [^0123456789]
    
    这样做:

    定义一段最小长度为2

    [^0123456789]{2,}
    
    构造只接受1-3个单词的正则表达式:

    [^0123456789]{2,}(\s[^0123456789]{2,}(\s[^0123456789]{2,})?)?
    

    实际上,对于第一个条件,您只需要一个RegExp。您基本上想要的是除了数字之外,名称只包含单词字符,但可能还有空格:

    name.match(/^([a-zA-Z]|\s)$/)
    
    对于第二个条件,您可以编写
    name.split(/\s+/).length=2

    总而言之:

    var name = "    JOe      John   Thomas  ";
    name = name.trim();
    if (name.match(/^([a-zA-Z]|\s)$/) && name.split(/\s+/).length <= 3 && name.length >=2) {
      console.log("name is valid!");
    }
    
    var name=“乔·约翰·托马斯”;
    name=name.trim();
    if(name.match(/^([a-zA-Z]|\s)$/)和&name.split(/\s+/).length=2){
    log(“名称有效!”);
    }
    
    这是一个符合您要求的正则表达式:

    ^(?=(?:[^A-Za-z]*[A-Za-z]){2})(?![^\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,]*[\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,])\S+(?: \S+){0,2}$
    
    (?:[^A-Za-z]*[A-Za-z]){2}(?![^\d~`?!^*;@=$%{}\[\]\\\\\\\\/\\\\\\\\/\\\\\”,[\d~`?!^*;@=$%{\\\[\\\\\\\\\\\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$
    

    说明

    • ^
      -将字符串锚定在开头
    • (?=(?:[^A-Za-z]*[A-Za-z]){2}
      -检查字符串中是否至少有2个英文字符的正向前瞻
    • (?![^\d~`?!^*.@=$%{}\[\]\\\\\\/\\\\\\\\\/\\\\”,]*[\d~`?!^*.@=$%{}\[\\\\\\\\\\\\\\/\\\\\\\\\\”,])
      -如果没有禁止字符(根据优化)(无法很好地格式化,必须加倍“`”符号)
    • \S{2,}
      -至少由2个字符组成的单词(一个非空白序列)
    • (?:\S+{0,2}
      -由至少1个字符组成的2个单词
    • $
      -字符串结束

    那么,名称是否只包含字母表?请提供所有允许字符的列表。
    ^[A-Z]([A-Za-Z])+(\s[A-Za-Z]{2,}){0,2}$
    够了吗?@Amit我认为至少2个字符是总数,而不是每个单词。@Mahesh:请提供有效和无效的输入示例。是的,总共至少2个字符。您可以使用
    [^0-9]
    ,您不必指定每个字符。请使用范围。另外,我希望使用白名单而不是黑名单:
    [a-z\-]
    。最终结果应该是这样的:
    /[a-z\-]{2,}(\s[a-z\-]{2,})?\s[a-z\-]{2,})?)/i
    我故意使用这个表单,因为@Mahesh定义了他不想使用的字符,至少两个字符代表整个名字。所以它可能是AB,A B。好的,我用
    +
    替换
    {0,2}
    。现在,它应该接受
    AB A B
    。我想\S{2,}不符合要求。全名应至少包含两个字符。例如全名=A麻烦示例:全名=A B C全名=麦克·罗杰Shane全名=A Mack C全名=A B Mack全名=约翰B C全名=约翰·麦克请检查更新,我添加了至少两个英文字母的检查。
    ^(?=(?:[^A-Za-z]*[A-Za-z]){2})(?![^\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,]*[\d~`?!^*¨ˆ;@=$%{}\[\]|\\\/<>#“.,])\S+(?: \S+){0,2}$