Javascript Jquery或JS:如何检查字符串上的无效字符?

Javascript Jquery或JS:如何检查字符串上的无效字符?,javascript,regex,Javascript,Regex,我知道以前有人问过这个问题,但我找到的所有答案在某些情况下都不正确 我需要验证密码字段并只允许某些字符 验证在客户端和服务器端都完成。在PHP上,我也无法让正则表达式按需要执行,因此我所做的是将密码拆分为一个字符数组,并根据允许的字符数组检查每个字符。如果数组中没有任何字符,则返回false 允许的字符为0-9、a-z、a-z和`!“?$%^&*()-+={[}]:;@~#|。/\(不允许使用空格) 现在我需要Javascript中类似的东西,但我不知道怎么做 正则表达式不能正常工作,因为当没有

我知道以前有人问过这个问题,但我找到的所有答案在某些情况下都不正确

我需要验证密码字段并只允许某些字符

验证在客户端和服务器端都完成。在PHP上,我也无法让正则表达式按需要执行,因此我所做的是将密码拆分为一个字符数组,并根据允许的字符数组检查每个字符。如果数组中没有任何字符,则返回false

允许的字符为0-9、a-z、a-z和`!“?$%^&*()-+={[}]:;@~#|<,>。/\(不允许使用空格)

现在我需要Javascript中类似的东西,但我不知道怎么做

正则表达式不能正常工作,因为当没有无效字符时(可能是因为字符顺序?)。 我从这个网站得到的当前正则表达式是

/^[A-Za-z\s`~!@#$%^&*()+={}|;:'",.<>\/?\\-]+$/
在JS上是否有其他解决方案,或者regex实际上是错误的


感谢您的帮助!

以下字符需要在字符类中转义:

 - / [ \ ] ^
请注意,使用
new
创建正则表达式对象时,需要转义的字符是不同的

当这些字符存在时,您没有转义它们,其中一些甚至没有包含在内。此外,当您指定不允许时,您在
\s
中包含空格。最后,除非我过快地查看了您的正则表达式,否则您没有包含数字。为了解决您的问题,即顺序是导致您的正则表达式出现的原因若失败,则顺序在字符类中不相关

修正正则表达式:

/^[0-9a-zA-Z`!"?$%\^&*()_\-+={\[}\]:;@~#|<,>.'\/\\]+$/
/^[0-9a-zA-Z`!“?$%\^&*()\\-+={\[}\]:;@~\\\\.\/\]+$/
这是一个“测试套件”。我不认为它是傻瓜式的,但它似乎工作得很好:

根据需要更改字典,您应该能够很好地测试大量正则表达式。注意,在当前的设置中,它只检查一致性——也就是说,它只检查正则表达式是否找到字典字符串中的所有内容

此外,您还需要检查服务器端的密码。您的客户端代码可以很容易地绕过,因此您应该始终在服务器端进行验证,以防止出现这种情况。客户端代码对于即时反馈很有用,但在这种情况下,其他功能就不多了

正如Qtax所指出的,以下内容将稍微缩短,并完成相同的任务:

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

看起来您希望接受除空格以外的所有字符。是否正确?如果是,您可以将除空格以外的所有字符与JS中的以下正则表达式进行匹配:

/^\S+$/​

示例:

您能否指定某些情况下的“那个表达不起作用?什么不起作用?你能给出一个测试样本来说明哪些是有效的,哪些是无效的吗?为什么你不能应用在PHP端使用的相同方法,并将输入的每个字符与数组进行匹配呢?谢谢大家。前3个密码未验证,最后一个密码未验证。它们上面没有无效字符…如果使用相同的方法会很好,但我不知道如何在JS上将字符串拆分为数组。我用我的方法在PHP上遇到了一些问题(例如:当使用范围(0,9)生成时,数字被视为整数;因此函数没有返回结果)。我可以在php上解决这些问题,但JS不是我的领域…
/^\S+$/
完成了相同的任务。此外,这将匹配更多的unicode字符,如¨。是的,除了OP仅针对一小部分字符显式匹配+谢谢Kai。除了上面提到的角色之外,我不想包括其他角色。Radu的解决方案对我所有的测试都非常有效。也谢谢你的建议!它将在另一个项目上派上用场。这在100%的时间里都有效!谢谢拉杜!!我可能忘了再次包含数字(我一直在向正则表达式添加和删除内容,同时试图更好地理解它)。非常感谢您的帮助。
[
不需要转义。如果放置在适当的位置,
^
-
也不需要转义。@Qtax很有趣。但您应该让我知道……这在他的书中!也就是说,我想我会保留
^
-
转义以避免混淆。
/^\S+$/​