正则表达式模式允许某些特殊字符

时间:2014-11-25 05:40:49

标签: java android regex validation

我在edittext android中使用正则表达式模式^[a-zA-Z0-9@.#$%^&*-_&\\\\]+$进行密码验证。我面临的问题是我的正则表达式无法限制像,;/这样的字符(即这应该受到限制,但目前允许)。请帮助。谢谢你的回答

2 个答案:

答案 0 :(得分:2)

问题是您在字符类中使用未转义的连字符。请改用:

^[a-zA-Z0-9@.#$%^&*_&\\\\-]+$

在正则表达式中间使用时,连字符的行为类似于范围a-zA-Z0-9等。在正则表达式中,范围为*-_。< / p>

*_之间,它会匹配以下字符::;/等。请查看此ascii图表以供参考(它将会匹配此表中的所有内容):

                    42  *    43  +    44  ,    45  -    46  .    47  /
  48  0    49  1    50  2    51  3    52  4    53  5    54  6    55  7
  56  8    57  9    58  :    59  ;    60  <    61  =    62  >    63  ?
  64  @    65  A    66  B    67  C    68  D    69  E    70  F    71  G
  72  H    73  I    74  J    75  K    76  L    77  M    78  N    79  O
  80  P    81  Q    82  R    83  S    84  T    85  U    86  V    87  W
  88  X    89  Y    90  Z    91  [    92  \    93  ]    94  ^    95  _

PS:您的正则表达式可以缩短为:

^[\\w@.#$%^&*&\\\\-]+$

答案 1 :(得分:1)

关键是这里的一小部分*-_ 这是来自&#34; &#34;的一系列字符。到&#34; _&#34;。如果你想只是&#34; &#34;,&#34; - &#34;,&#34; _&#34;你需要逃避&#34; - &#34;。你最后还有一个重复的角色&#34; \&#34;

工作正则表达式将是:^[a-zA-Z0-9@.#$%^&*\-_&\\]+$

为了将来参考,您可以使用RegExr。当你将鼠标悬停在正则表达式的部分区域时,它会很好地分解它们并解释它们。