2013-12-18 138 views
2

我有以下的正则表达式语句:正则表达式来检查字符串包含空格和特殊字符

String PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,12})"; 

我检查语句,像这样:

Pattern pattern = Pattern.compile(PASSWORD_PATTERN); 
Matcher matcher = pattern.matcher(password); 
if(!matcher.matches()) { 
    // error 
} 

如何调整这种方式,包括检查任何空格和特殊字符?如果密码包含任何空格或任何特殊字符,match()方法将失败。

+1

使用\\对你是不能给样本输入,并且希望正则表达式匹配的内容匹配的空白 –

+1

? –

+0

你可以定义特殊字符吗? – anubhava

回答

2

如果你只是想拒绝的空格,你可以使用:

(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])\\S{6,12} 

\\S只会匹配非空格。

另外,您可能不需要外部圆括号。

编辑:没有看到其他部分。

如果您想拒绝特殊字符,您可以将\\S更改为否定类。使用这个虽然意味着你将不得不使用:[^\\s ... ]

例如,假设不应该有任何?或空白。这将成为:

(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[^\\s?]{6,12} 

如果你不想!之一:

(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[^\\s?!]{6,12} 
+0

我真的很喜欢你的方法。它更清洁,更清晰,在我的回答中可能更快。 +1 – Pshemo

3

正如比赛()如果密码包含任何空格或特殊字符的方法应该失败

就像您使用预读(?=....)来检查密码是否包含至少一个

  • 数字(?=.*\\d)
  • 小写字母(?=.*[a-z])
  • 大写字母(?=.*[A-Z])

您可以添加负前瞻(?!...),以确保您的密码将不包含任何想要的字符像

  • 空白(?!.*\\s)
  • 特殊字符(取决于你想要的这里),例如不能有+-!(?!.*[+\\-!])

现在只要将所有的它在一个模式

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\\s)(?!.*[+\\-!]).{6,12}) 
+0

啊,这是有道理的,这是我一直在寻找。 +1 – invictvs1

+0

@invictvs很高兴我能帮忙:) – Pshemo

0

只需添加:

[\w/^\s] 

- \ W检测用字characte的rs(无特殊字符)。
- ^意味着NOT和\ s用于检测空白字符。
- 因此,^\ s确保没有空白。

完全字符串:

"((?=.*\\d)(?=.*\\w)(?=.*[\w/^\s])(?=.*[A-Z]).{6,12})" 
相关问题