【发布时间】:2014-11-25 05:40:49
【问题描述】:
我在edittext android中使用正则表达式模式^[a-zA-Z0-9@.#$%^&*-_&\\\\]+$进行密码验证。我面临的问题是我的正则表达式无法限制,;/ 之类的字符(即这应该被限制但目前允许)。请帮助解决这个问题。谢谢你的回答
【问题讨论】:
标签: java android regex validation
我在edittext android中使用正则表达式模式^[a-zA-Z0-9@.#$%^&*-_&\\\\]+$进行密码验证。我面临的问题是我的正则表达式无法限制,;/ 之类的字符(即这应该被限制但目前允许)。请帮助解决这个问题。谢谢你的回答
【问题讨论】:
标签: java android regex validation
问题是您在字符类中间使用了未转义的连字符。改用这个:
^[a-zA-Z0-9@.#$%^&*_&\\\\-]+$
在正则表达式中间使用连字符时的行为类似于范围,即a-z 或A-Z 或0-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@.#$%^&*&\\\\-]+$
【讨论】:
^[\\w@.#$%^&\-*&\\\\]+$
\\w,因为问题被标记为 Java。
关键在这个小部分*-_
这是从“”到“_”的字符范围。如果您只想使用“”、“-”和“_”,则需要转义“-”。您在末尾还有一个重复字符“\”
工作的正则表达式将是:^[a-zA-Z0-9@.#$%^&*\-_&\\]+$
您可以使用RegExr 以供将来参考。当您将鼠标悬停在正则表达式的某些部分上时,它可以很好地分解它们并解释它们。
【讨论】: