正则表达式捕获任何非字母,非数字,非空格

时间:2016-10-06 15:08:56

标签: java regex special-characters

我试图只允许字母数字和空格。

没有_。 ! 〜`

和任何其他特殊字符(我知道_应该是字母......我只是不想要它)

我的问题是:我该怎么写呢?

大多数情况下,我发现了回答指出了非法的字符#34;像:

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

但我想知道是否有更好的方式来做:

^[a-zA-Z0-9\s]+[a-zA-z0-9\s]*$

这个问题是,如果字符[]^``_\在字母/数字/空格之后仍然通过

[]`\^_    <<this will be illegal
1[]`\^_    <<this will not be caught as illegal

我也尝试过:^[\w\d\s]+[\w\d\s]*$

但它让_直到

编辑 我在第二个代码(A-z)中输入了拼写错误,因此将其更改为

^[a-zA-Z0-9\s]+[a-zA-Z0-9\s]*$

它完美无缺

所以最好这样写,而不是输入everysingle特殊聊天(如第一个代码)? 是否有可能通过此检查滑倒的角色?

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以使用否定的字符类来做到这一点。例如,匹配所有非字母的字符:

[^A-Za-z]+

您可以使用锚点来匹配仅包含字母的行

^[^A-Za-z]+$

如果您将空格或空格(\s)视为有效,只需将其添加到字符类:

^[^A-Za-z\s]+$

与“最佳”方法相关,您可以肯定地比较性能,但如果性能没有太大影响,最好的方法是什么,imho是最易读的表达方式。

答案 1 :(得分:-1)

以下内容应该有效(上面示例的更正/简化版本)

如果要包括所有字母(上部或下部)和任何数字,只包括空格字符:

^[a-zA-Z0-9 ]+$

如果你想要任何空格:

^[a-zA-Z0-9\s]+$