0

我想检查一些必须满足以下条件的文本框:我的意思是来自 az(大写和小写)数字 0-9 的字母,特殊字符是 ~`!@#$%^&*()- _+={}[];:'",.<>/?

  1. 它只能包含字母
  2. 它不能只包含数字
  3. 它不能只包含特殊字符
  4. 它不能只包含数字和特殊字符
  5. 它可以包含字母、数字和特殊字符
  6. 它可以包含字母和数字
  7. 它可以包含字母和特殊字符

我找到了一个解决方案,但似乎对我不起作用:

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

我正在检查它:

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

2 回答 2

2

该问题可以重述为匹配仅包含字符的字符串

A-Za-z0-9~`!@#$%^&*()-_+={}[];:'",.<>/?

这样至少其中一个是字母。

幸运的是,您已经涵盖了 U+0021 到 U+007F 范围内的所有可打印字符,因此所需的正则表达式很简单

[!-~]*[A-Za-z][!-~]*

编辑:仔细阅读后,我注意到您不允许使用反斜杠!如果你想允许反斜杠,上面的正则表达式是可以的;如果没有,你应该像这样修改它:

[!-\[\]-~]*[A-Za-z][!-\[\]-~]*

这有点难看,因为要排除反斜杠我们不得不说

  • 范围内的所有字符![联合范围内的字符]to ~,并明确提及[and]需要转义,您猜对了,\.

希望你的意思是允许\你可以使用上面更简单的正则表达式。

编辑 2

为了使正则表达式更有效,您应该使用不情愿的量词(就像 kcsoft 所做的那样):

[!-~]*?[A-Za-z][!-~]*

也适用于 JavaScript,但如果您使用的是 Java,则不适用matches,您应该锚定正则表达式以匹配整个字符串,在 JavaScript 中给出:

/^[!-~]*?[A-Za-z][!-~]*$/

i而且,正如您在问题中所做的那样,您可以使用修饰符将其缩短一点:

/^[!-~]*?[A-Z][!-~]*$/i
于 2013-06-20T05:57:03.357 回答
0

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

/.*?[a-zA-Z]+.*/

或者,如果您需要指定特殊字符列表:

/[list of chars]*?[a-zA-Z]+[list of chars]*/
于 2013-06-20T05:50:13.760 回答