Javascript 字母专用数字的正则表达式

Javascript 字母专用数字的正则表达式,javascript,regex,Javascript,Regex,我想勾选几个必须满足以下条件的文本框: 我的意思是字母表来自a-z(大写和小写)数字0-9,特殊字符是~`!@#$%^&*()-_+={}[];:'“,./ 它只能包含字母表 它不能只包含数字 它不能只包含特殊字符 它不能只包含数字和特殊字符 它可以包含字母、数字和特殊字符 它可以包含字母和数字 它可以包含字母表和特殊字符 我找到了解决方案,但似乎不适合我: /^[a-z0-9/. -!@#$%^&*(){}:;"',/?]+$/i 我将其检查为: var alpha=/^[a-z0-

我想勾选几个必须满足以下条件的文本框: 我的意思是字母表来自a-z(大写和小写)数字0-9,特殊字符是~`!@#$%^&*()-_+={}[];:'“,./

  • 它只能包含字母表
  • 它不能只包含数字
  • 它不能只包含特殊字符
  • 它不能只包含数字和特殊字符
  • 它可以包含字母、数字和特殊字符
  • 它可以包含字母和数字
  • 它可以包含字母表和特殊字符
  • 我找到了解决方案,但似乎不适合我:

    /^[a-z0-9/. -!@#$%^&*(){}:;"',/?]+$/i
    
    我将其检查为:

    var alpha=/^[a-z0-9/. -!@#$%^&*(){}:;"',/?]+$/i;
    if (!alpha.test(username.value))
    {
        alert('Invalid username');
        document.theForm.username.focus();
        return false;
    }
    

    你能给出一些输入示例吗?你能试试这个吗

    /.*?[a-zA-Z]+.*/
    
    或者,如果需要指定特殊字符列表:

    /[list of chars]*?[a-zA-Z]+[list of chars]*/
    

    这个问题可以重新表述为匹配只包含字符的字符串

    A-Za-z0-9~`!@#$%^&*()-_+={}[];:'",.<>/?
    
    编辑:仔细阅读后,我注意到您不允许反斜杠!如果您想允许反斜杠,上面的正则表达式可以;如果不允许,您应该这样修改它:

    [!-\[\]-~]*[A-Za-z][!-\[\]-~]*
    
    这有点难看,因为要排除反斜杠,我们必须说

    • 范围
      [
      ~
      的所有字符,明确提及
      [
      ]
      需要使用
      \
      转义
    希望您打算允许使用
    \
    ,以便可以使用上面更简单的正则表达式

    编辑2

    为了提高正则表达式的效率,您应该使用不情愿的量词(正如kcsoft所做的那样):

    同样对于JavaScript,但对于Java,如果您使用的是
    匹配
    ,则应锚定正则表达式以匹配整个字符串,在JavaScript中给出以下内容:

    /^[!-~]*?[A-Za-z][!-~]*$/
    
    而且,正如您在问题中所做的那样,您可以使用
    i
    修饰符将其进一步缩短:

    /^[!-~]*?[A-Z][!-~]*$/i
    

    需要澄清:1.什么是“特殊字符”?2.您标记了这个Java和JavaScript,但是Java正则表达式更方便,因为它们可以使用
    \p{L}
    提取任何Unicode字母;在JavaScript中这样做是非常繁琐的。您所说的“字母表”是什么意思“?为了简化1-7:它必须至少包含一个字母,也可能包含数字和特殊字符。不完全是重复的,但足够接近:-您可以很容易地调整此解决方案以解决您的问题。我已编辑了我的问题。如果它包含反斜杠等非特殊字符,请您查看它。”,它是否无效?@user2322631此正则表达式允许使用列表之外的字符,例如
    é
    ü
    以及空格、制表符和各种控制字符,因为
    可以匹配除新行以外的任何字符。注意正则表达式中的点。如果我只包含像-:,这样的特殊字符,我应该在上面的正则表达式中做什么更改?您需要在正则表达式中定义您的列表。比如/[角色列表]*?[a-zA-Z]+[角色列表]*/我怀疑OP是否知道他/她真正需要什么“特殊”角色。例如,正则表达式中缺少
    [
    ]
    ,但后来包含在说明中。另外,
    /
    包含了两次,所以其中一个应该是
    \
    。是的,我猜目的是“所有ASCII可打印的标点符号”,即U+0021到U+007F范围内的字符,它们不是字母和数字。
    /^[!-~]*?[A-Za-z][!-~]*$/
    
    /^[!-~]*?[A-Z][!-~]*$/i