【问题标题】:Regex pattern allowing certain special characters允许某些特殊字符的正则表达式模式
【发布时间】:2014-11-25 05:40:49
【问题描述】:

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

【问题讨论】:

    标签: java android regex validation


    【解决方案1】:

    问题是您在字符类中间使用了未转义的连字符。改用这个:

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

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

    *_ 之间,它将匹配以下字符::;/ 等。查看此 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@.#$%^&*&\\\\-]+$
    

    【讨论】:

    • ASCII 图表的非常好的细分。我还想指出加倍的 \\.
    • 是的,肯定转义的连字符也可以,例如^[\\w@.#$%^&amp;\-*&amp;\\\\]+$
    • 我指的是结尾 \\\\ 是多余的。
    • 加\\\\和\\有什么区别??
    • @AlexanderKerchum:我使用了\\w,因为问题被标记为 Java。
    【解决方案2】:

    关键在这个小部分*-_ 这是从“”到“_”的字符范围。如果您只想使用“”、“-”和“_”,则需要转义“-”。您在末尾还有一个重复字符“\”

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

    您可以使用RegExr 以供将来参考。当您将鼠标悬停在正则表达式的某些部分上时,它可以很好地分解它们并解释它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多