我在edittext android中使用正则表达式模式^[a-zA-Z0-9@.#$%^&*-_&\\\\]+$
进行密码验证。我面临的问题是我的正则表达式无法限制像,;/
这样的字符(即这应该受到限制,但目前允许)。请帮助。谢谢你的回答
答案 0 :(得分:2)
问题是您在字符类中使用未转义的连字符。请改用:
^[a-zA-Z0-9@.#$%^&*_&\\\\-]+$
在正则表达式中间使用时,连字符的行为类似于范围a-z
或A-Z
或0-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。当你将鼠标悬停在正则表达式的部分区域时,它会很好地分解它们并解释它们。