Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式的例子是什么:字符串不应该包含紧跟在同一序列后面的任何字符序列?_Java_Regex - Fatal编程技术网

Java 正则表达式的例子是什么:字符串不应该包含紧跟在同一序列后面的任何字符序列?

Java 正则表达式的例子是什么:字符串不应该包含紧跟在同一序列后面的任何字符序列?,java,regex,Java,Regex,在我的程序中,我有一个正则表达式,它确保输入字符串至少有一个字母和一个数字字符,长度在2到10之间 Pattern p = Pattern.compile("^(?=.*\\d)(?=.*[A-Za-z])[A-Za-z0-9]{2,10}$"); 根据新的要求,字符串也不应包含紧跟着相同序列的任何字符序列。我找了很多,但都找不出来。你能帮忙吗?或指向任何URL/文档 非常感谢您的回复 要求:字符串不能包含紧跟同一序列的任何字符序列 我认为要求不明确 我不确定“12aardvark”是否有效,

在我的程序中,我有一个正则表达式,它确保输入字符串至少有一个字母和一个数字字符,长度在2到10之间

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而被排除在外?