如何用正则表达式实现规定用户输入密码的格式为:(长度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=True
和inplace=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