正则表达式,接受特殊字符除外;并且必须包含一个字母数字字符

时间:2013-01-27 13:03:20

标签: javascript regex

这是我想出的,但也接受;。有人可以帮助我理解我所缺少的东西

var VALID_ALPHANUMERIC_WITH_SPECIAL_CHARS = /^(?=.*[0-9])|(?=.*[a-zA-Z])([a-zA-Z0-9]|[@#!%*&_\/.:{}\[\]\$\-\=\?\\\(\)\+\~\`\^\<\>])+$/;

由于

4 个答案:

答案 0 :(得分:1)

如果要检查至少有一个字母数字字符,并在文本中允许使用字母数字+一些特殊字符,则下面的正则表达式应该可以正常工作。我也冒昧地删除了一些不必要的逃脱。

/^(?=.*[A-Za-z0-9])[a-zA-Z0-9@#!%*&_\/.:{}\[\]$=?\\()+~`^<>-]+$/

在某些地方可以进一步简化,但为了清楚起见,我将它们单独留下。

答案 1 :(得分:1)

@nhahtdh已经为您提供了正确的正则表达式。如果你想了解你的正则表达式失败的原因,让我们来看看它:

^(?=.*[0-9])   # Either anchor the match at the start and assert
               # that there is at least one ASCII digit
|              # OR
               # Assert that there is
(?=.*[a-zA-Z]) # at least one ASCII letter, then match
([a-zA-Z0-9]|[special chars...])+ # one or more of these characters
$              # with an unnecessary alternation; anchor the match to the end

你看到了问题吗?

答案 2 :(得分:0)

如果您想接受;以外的特殊字符,其中只有一个字母数字字符

var re = /^[@#!%*&_\/.:{}\[\]$\-=?\\()+~`^<>]*[a-zA-Z0-9][@#!%*&_\/.:{}\[\]$\-=?\\()+~`^<>]*$/;

如果您想要除;以外的特殊字符至少一个字母数字字符

var re = /^[a-zA-Z0-9@#!%*&_\/.:{}\[\]$\-=?\\()+~`^<>]*[a-zA-Z0-9][a-zA-Z0-9@#!%*&_\/.:{}\[\]$\-=?\\()+~`^<>]*$/;

JSFiddle进行测试。

答案 3 :(得分:0)

此部分(?=.*[a-zA-Z])匹配后跟字母的任何字符,因此匹配;a

您可以执行(?=[^;]*[a-zA-Z])以匹配除;

之外的任何字符