如何用正则表达式实现规定用户输入密码的格式为:(长度6到18个字符,不能全为重复字母,或者连续字母)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用正则表达式实现规定用户输入密码的格式为:(长度6到18个字符,不能全为重复字母,或者连续字母)相关的知识,希望对你有一定的参考价值。

例如aaaaaa或者abcdefgh这样都不通过,但是aabbcccdddd可以。如果js不能实现,用什么方法可以实现?

// 存在一个你不容易发现的问题,基本能解决你的问题
/**
 * checkPassword函数,参数为要检验的密码pwd,
 * 如果pwd符合规则,返回true,否则返回false
 */
function checkPassword(pwd)
    // 长度为6到18个字符
    var reg = /^.6,18$/;
    if(!reg.test(pwd))
        return false;
    
    // 全部重复
    var repeat = true;
    // 连续字符
    var series = true;

    var len = pwd.length;
    var first = pwd.charAt(0);
    for(var i=1;i<len;i++)
        repeat = repeat && pwd.charAt(i) == first;
        series = series && pwd.charCodeAt(i) == pwd.charCodeAt(i-1) + 1;
    
    return !(repeat || series);

参考技术A function checkPwd(str)

    var str=str.replace(/(^\\s*)|(\\s*$)/g,''),
        len=str.length,
        error='error:none', // 无错误
        repeat=new RegExp('(\\\\w)\\\\1'+(len-1)+''),
        series='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    if(len<6 || len>18)
        error='error:length'; // 错误:字符数
    else if(repeat.test(str))
        error='error:repeat'; // 错误:重复
    else if(series.indexOf(str)>=0)
        error='error:series'; // 错误:连续
    // alert(error); 测试用
    return error=='error:none';

参考技术B 这个要用正则+js判断来作

正则可以判断长度以及是否为字母,但是无法判断输入数据是否重复和连续

Pandas DF:如何用分隔符(;CSV 格式)将 '-' 替换为 '_'

【中文标题】Pandas DF:如何用分隔符(;CSV 格式)将 \'-\' 替换为 \'_\'【英文标题】:Pandas DF : how to replace '-' by '_' with separators (; CSV format)Pandas DF:如何用分隔符(;CSV 格式)将 '-' 替换为 '_' 【发布时间】:2019-08-02 02:07:59 【问题描述】:

我需要正则表达式和正则表达式函数方面的帮助!!!我有一个用“;”分隔的 CSV 文件并且需要将 - 替换为 _。数据如下所示:

79             80;0;RueSaint_Hilaire;Locale;15-25;1;1             
80              81;0;RueSaint_Hilaire;Locale;5-10;5;5             
81                   82;0;RueTaillon;Locale;10-15;1;1             
82                   83;0;RueTanguay;Locale;10-15;2;2             
83                   84;0;RueTanguay;Locale;15-25;2;2             
84                    85;0;RueTanguay;Locale;5-10;3;3  

例如,我需要将 15-25 替换为 15_25。

到目前为止,我已经尝试过了:

df.replace('-','_', inplace=True)

或者这个:

df_obj = df.select_dtypes(['object'])
df[df_obj.columns] = df_obj.apply(lambda x: x.str.strip())
df.replace('-','_', inplace=True)
print(df)

没有任何成功。这里有任何正则表达式或替换向导可以解决这个小问题吗?

非常感谢!

【问题讨论】:

RueSaint-Hilaire 应该更改为RueSaint_Hilaire?您还希望将这些字段读入单独的列,还是您想要一个大字符串? 对不起,我的错误。名称已从以前的数据库中更正。我需要将 15-25、5-10、10-15(等等...)更改为 15_25,5_10,10_15 【参考方案1】:

这是我能想到的最简单的实现:

with open(<PATH TO FILE>, 'r') as fileIn:
    data = fileIn.read()
    print("\nOriginal data: \n", data)
    data = data.replace('-', '_')
    print("Modified data: \n", data)

这给出了:

Original data:
80,0,RueSaint-Hilaire,Locale,15-25,1,1
81,0,RueSaint-Hilaire,Locale,10-May,5,5

Modified data:
80,0,RueSaint_Hilaire,Locale,15_25,1,1
81,0,RueSaint_Hilaire,Locale,10_May,5,5

【讨论】:

【参考方案2】:

如果您需要在数字之间专门更改您的-,请选择:

import re

regex = r"(\d+)-(\d+)"

test_str = ("79             80;0;RueSaint_Hilaire;Locale;15-25;1;1         \n"
    "80              81;0;RueSaint_Hilaire;Locale;5-10;5;5         \n"
    "81                   82;0;RueTaillon;Locale;10-15;1;1         \n"
    "82                   83;0;RueTanguay;Locale;10-15;2;2         \n"
    "83                   84;0;RueTanguay;Locale;15-25;2;2         \n"
    "84                    85;0;RueTanguay;Locale;5-10;3;3  ")

subst = "$1_$2"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

您可以在此处查看正则表达式:https://regex101.com/r/DGrm7V/1

【讨论】:

【参考方案3】:

默认为regex=False。因此,使用您现有的代码使用正则表达式替换为regex=Trueinplace=True。见replace

df.replace('-', '_',regex=True, inplace=True)
print(df)

【讨论】:

我只是错过了 regex=True 参数。感谢您指出这一点! 是的,这就是为什么我也为您添加了 replace 手册。希望这会有所帮助【参考方案4】:

这里有一个关于 pandas 的很好的常见问题解答:https://***.com/tags/pandas/info

将 lambda 应用于数据框,如下所示:

df['foo'] = df['foo'].apply(lambda x: x.replace('_', '-'))

【讨论】:

【参考方案5】:

通常,我会选择:

df['Col'] = df['Col'].str.replace('-', '_')

【讨论】:

以上是关于如何用正则表达式实现规定用户输入密码的格式为:(长度6到18个字符,不能全为重复字母,或者连续字母)的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式判断时间输入是不是正确?格式为00:00,小时是00-23,分钟是00-60,秒钟00-60

如何用正则表达式限制文本框输入数字位数?

Java里面效验日期的正则表达式

请问在C#的Winform下如何用正则表达式限制用户只能在textBox中输入18位的身份证号码。

如何用正则表达式在JS中匹配出相应的拓展名?

Pandas DF:如何用分隔符(;CSV 格式)将 '-' 替换为 '_'