Java 正则表达式的例子是什么:字符串不应该包含紧跟在同一序列后面的任何字符序列?
在我的程序中,我有一个正则表达式,它确保输入字符串至少有一个字母和一个数字字符,长度在2到10之间Java 正则表达式的例子是什么:字符串不应该包含紧跟在同一序列后面的任何字符序列?,java,regex,Java,Regex,在我的程序中,我有一个正则表达式,它确保输入字符串至少有一个字母和一个数字字符,长度在2到10之间 Pattern p = Pattern.compile("^(?=.*\\d)(?=.*[A-Za-z])[A-Za-z0-9]{2,10}$"); 根据新的要求,字符串也不应包含紧跟着相同序列的任何字符序列。我找了很多,但都找不出来。你能帮忙吗?或指向任何URL/文档 非常感谢您的回复 要求:字符串不能包含紧跟同一序列的任何字符序列 我认为要求不明确 我不确定“12aardvark”是否有效,
Pattern p = Pattern.compile("^(?=.*\\d)(?=.*[A-Za-z])[A-Za-z0-9]{2,10}$");
根据新的要求,字符串也不应包含紧跟着相同序列的任何字符序列。我找了很多,但都找不出来。你能帮忙吗?或指向任何URL/文档
非常感谢您的回复
要求:字符串不能包含紧跟同一序列的任何字符序列
我认为要求不明确
我不确定“12aardvark”是否有效,因为-
1.有重复的“a”。这与字符串“11abcdefg”相同。
2.有重复的“ar”
3.但是“ar”后面并没有紧接着相同的序列。中间有“dv”
我认为字符串“12ardvark”和“12aardvark”不应该通过验证,因为它有重复的字符序列:“ar”,尽管它后面没有紧接着相同的序列
FO123或ab1212不能肯定通过,因为只有2个字符的fo后面紧跟着相同的序列
您对需求的假设是什么
使用基本的字符串函数和多个更小的正则表达式可读性更强。为什么要尝试使用正则表达式检查字符串的长度,而lengthpwd将执行相同的操作
下面是一些应能很好地转换为Java的Python代码:
import re
def validate_password(pwd):
# return true if valid or false is invalid.
if ( len(pwd) < 2 or len(pwd) > 10 ):
print "Password %s : Failed length requirement" % pwd
return False
if ( re.search(r"\d", pwd) == None ):
print "Password %s : must contain at least one number" % pwd
return False
if ( re.search(r"[a-zA-Z]", pwd) == None ):
print "Password %s : must contain at least one alphabetical character" % pwd
return False
if ( re.search(r"(...+)\1", pwd) != None ):
print "Password %s : must not contain any repeating substrings of three characters or more" % pwd
return False
print "Password %s is OK" % pwd
return True
test_pwds = [ "1", "123", "aardvark", "12ardvark", "12aardvark", "foofoofoo1" ]
for pwd in test_pwds:
validate_password (pwd)
使用一系列小型测试(而不是一个大型测试)验证输入有几个好处:
这更容易理解。
它更容易调试。
以后更容易维护。假设你的老板增加了另一项要求,密码中必须至少有两个符号。
您可以告诉用户他们的密码失败的标准,而不是像您的密码必须满足大量标准这样的一般消息。
使用基本的字符串函数和多个更小的正则表达式可读性更强。为什么要尝试使用正则表达式检查字符串的长度,而lengthpwd将执行相同的操作
下面是一些应能很好地转换为Java的Python代码:
import re
def validate_password(pwd):
# return true if valid or false is invalid.
if ( len(pwd) < 2 or len(pwd) > 10 ):
print "Password %s : Failed length requirement" % pwd
return False
if ( re.search(r"\d", pwd) == None ):
print "Password %s : must contain at least one number" % pwd
return False
if ( re.search(r"[a-zA-Z]", pwd) == None ):
print "Password %s : must contain at least one alphabetical character" % pwd
return False
if ( re.search(r"(...+)\1", pwd) != None ):
print "Password %s : must not contain any repeating substrings of three characters or more" % pwd
return False
print "Password %s is OK" % pwd
return True
test_pwds = [ "1", "123", "aardvark", "12ardvark", "12aardvark", "foofoofoo1" ]
for pwd in test_pwds:
validate_password (pwd)
使用一系列小型测试(而不是一个大型测试)验证输入有几个好处:
这更容易理解。
它更容易调试。
以后更容易维护。假设你的老板增加了另一项要求,密码中必须至少有两个符号。
您可以告诉用户他们的密码失败的标准,而不是像您的密码必须满足大量标准这样的一般消息。
定义字符序列,后跟相同的字符序列。aardvark是否被排除在外,因为它一行包含两次字符a?@Li aung Yip:请注意,根据OP,输入数据必须至少有一个字母和一个数字。@Cylian:当然。我的问题可以重新表述为:11abcdefg是否被排除在外,因为它在一行中包含两次1?定义字符序列,后跟相同的字符序列。aardvark是否被排除在外,因为它一行包含两次字符a?@Li aung Yip:请注意,根据OP,输入数据必须至少有一个字母和一个数字。@Cylian:当然。我的问题可以重新表述为:11abcdefg是否因为连续两次包含1而被排除在外?