正则表达式关于复杂用户名的验证

前端开发中的输入框正则表达式验证 正则表达式(Regular Expression),简称为regex或reg,是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。它提供了一种灵活而强大的方式,用于匹配字符串中的字符组合。正则表达式功能强大,可以用于文本搜索、查找、替换、验证等操作,是处理字符串和文本数据的关键工具。通过本小节,我们了解了如何构建能够有效匹配IP地址、域名和服务器端口号的正则表达式。这些表达式是网络安全、网络配置和开发中的基本工具。 阅读详情
1)不可以为空  
2)允许含有特殊字符:! $ % & / () - / ; < ? [] ^ {} 
3)必须同时含有半角英文大写字母、半角英文小写字母以及半角数字 
4)8文字以上,16文字以下 

 

火龙果提供了最佳的方法,代码如下(由于我太笨,无论如何我也贴不上我的代码)

import java.util.regex.Pattern;
public class Test01 {
  public static void main(String[] args) {
    String[] strs = {
        "",
        "123",
        "A4783",
        "zA25$4783",
        "z4uu3j57E{",
        "524754x1&#",
        "10248Zgk@",
        "102xfas44dsfdhd48Zgk@",
        "xfAs!dsf5dh&doo",
        "xfAsmdsf5dhdoo"
    };
    // 限定条件
    final String C;
    // 允许出现的字符
    final String SPECIAL_CHAR = "[-A-Za-z0-9!$%&()/;<?{}//[//]^////]";
    // 数量
    final String QUANTITY = "{8,16}";
    Pattern pattern = Pattern.compile(CONDITION + SPECIAL_CHAR + QUANTITY);
    for (String str : strs) {
      System.out.println(pattern.matcher(str).matches());
    }
  }
}

 

使用了预搜索/零宽度的缝隙匹配具体介绍为(?=.*[a-z]) 表示当前位置后面必须出现 .*[a-z] 的字符,这个可以理解为必须出现小写字母。或者可以理解为某一个字符间的缝隙必须满足的条件,这个仅仅作为条件判断并不能匹配任何字符,因为这属于非捕获组中的环视(lookarround)零宽度匹配。 举个大家常见的例子: 表达式:Win(?=XP) 现有字符串 WinXP 和 WinNT,在应用这个表达式时前者能与之进行匹配,为什么呢? 当匹配器指示到 (?=XP) 时,也就是在 n 字母后面的缝隙,这个缝隙必须满足的条件是:后面的字符必须是 XP,如果是的话,匹配成功,否则匹配失败。由于 (?=XP) 是匹配缝隙的,因此并不会把 XP 给匹配输出,而只输出了 Win 因此,这个表达式的语义可以看作是:找到后面为“XP”字符所有的 Win。 

假如,我们把表达式写成 Win(?=XP)(?=NT) 这样的话,那么这个语义是:找出后面 
为“XP”并且为“NT”字符所有的 Win 可以想象,这是个永远无法满足的匹配。(?=XP)(?=NT) 这个表示当前的缝隙必须同时满足的条件。 

把这个表达式再改一下,改成 Win(?=.*XP)(?=.*NT) 这个表示 Win 的后面必须出现XP 与 NT,位置和顺序都是无关的(这主要是 .* 的作用)。当然了这个表达式的效率是比较低的,得向后进行两次断言。 如果字符串是 WincbaXPabcNT 这个字符串,当匹配指示器走到 n 后面的缝隙时开始进行向后断言,首先对 .*XP 进行断言,很明显能将 cbaXP 匹配成功,这时第一个断言完成,再对 .*NT 断言,可以看出 cbaXPabcNT 能与其匹配成功,这时第二个断言完 成,因此表达式 Win(?=.*XP)(?=.*NT) 能对 WincbaXPabcNT 进行匹配。同理 WincbaNTabcXP 也是同样的效果。 

如果能理解上面的这些,对于 (?=.*[a-z])(?=.*[A-Z])(?=.*//d) 这个的理应该不会很难吧,这个只不过是必须同时满足三个条件。这个表达式在开始部分就进行断言,即索引为 0 的地方,也就是第一个字符的前面的缝隙,这个缝隙后面的字符必须满足 .*[a-z]  .*[A-Z]  .*//d  三个条件,也就是说
必后面必须出现至少一个小写字母、至少一个大写母、至少一个数字。 至于表达式 2 的使用,也就是 [  ] 内字符的转义需要注意一下。 ^ 和 - 在 [  ] 结构的表达式中是有一定意义的。 [^abc] 表示除 abc 以外所有的字符,注意,这是放在最前面表示这个意思,如果改成 [a^bc] 这个仅表示 a ^ b c 四个字符。如果需要匹配 ^ 这个字符的话,千万不要把它放在第一个,如果一定要放在第一个的话,得使用转义符。- 在 [  ] 表示字符的范围,比如 [a-z] 表示 a 与 z 之间的 26 个字母[a-zA-Z] 这个表示 a-z 和 A-Z 的 52 个字母。使用范围得注意了,如果写成[z-a] 的话,在 Pattern.compile 编译表达式时会对范围进行检查,这时会产生异常,因此在使用 - 范围时,后面的 Unicode 值必须大于等于前面的 Unicode值。 如果要匹配“-”的话,尽量不要把 - 这个放在字符之间,可以放在 [  ] 的两边。比如 [-a-z] 这就能匹配 26 个小写字母和“-”了。当然了,我们也可以写成[a-z-A-Z] 这个可以匹配 52 字母和“-”,但是这样很不直观,我们宁愿写成[a-zA-Z-] 或者 [-a-zA-Z] 这样。 







<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
Google Earth Engine——使用STARFM 图像融合算法将Landsat 和 MODIS 融合得出2000-2023 NDVI长时序图(空间分辨率为 30 米、时间分辨率为 16 天) 非本地入侵物种是全球生态系统面临的主要威胁之一。野葛(Pueraria montana)是一种生长迅速的藤本植物,原产于亚洲,现已入侵美国一些地区,因此该物种的管理成为一个重要问题。利用 Landsat 和 MODIS 平台收集的数据,计算了 2000 年至 2015 年肯塔基州三个侵扰地点的归一化差异植被指数(NDVI)估算值。使用 STARFM 图像融合算法将大地遥感卫星和 MODIS 得出的 NDVI 结合成空间分辨率为 30 米、时间分辨率为 16 天的时间序列。 阅读详情

相关推荐

point transformer v3结构

分割结构: embedding->enc->dec embedding->enc0->enc1->enc2->enc3->enc4->dec3->dec2->dec1->dec0 embedding ->block0->block1 ->dow->block0->block1 ->dow->block0->block1 ->dow->block0->block1-&gt

weixin_45625419的博客 582

正则表达式之用户名、密码、手机号码、邮箱、地址的字符序列规则

正则表达式之用户名的字符序列规则 用户名开头不能是数字,不能包含空格,特殊标点符号,长度在 2 到 12 之间: 第一种写法:String user = "[a-zA-Z\u4E00-\u9FA5]{1}[a-zA-Z0-9\u4E00-\u9FA5]{1,12}"; 第二种写法:String user = "[^\\d^\\s^\\p{Punct}[\u4E00-\u9FA5]]{1}[^...

LagerSwan的博客 6104

基于PI双闭环解耦控制的三相SVPWM电压型逆变器(3)--调制方法

阐述SPWM和SVPWM的原理以及实现方法

weixin_58670090的博客 6260

常用的javaScript正则表达式

1. 用户名正则 //用户名正则,4到16位(字母,数字,下划线,减号) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //输出 true console.log(uPattern.test("iFat3")); 复制代码2. 密码强度正则 //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 var pPattern = /^....

weixin_30781107的博客 2315

避坑指南:SAP STO订单里‘发货存储地点’栏位不显示?检查这个关键配置

本文深入解析SAP STO订单中‘发货存储地点’栏位缺失问题的根本原因及解决方案。通过激活库存地点间转储功能、维护库存地点主数据等关键配置步骤,帮助用户快速恢复业务操作。特别适用于MM模块实施顾问和SAP系统管理员处理UB STO相关技术问题。

weixin_30632089的博客 100

Zotero on Mac: 高效文献管理与引用指南

本文为Mac用户提供了一份全面的Zotero高效文献管理与引用指南。从安装配置、文献收集管理、PDF深度阅读与笔记,到在Word中无缝插入引用和生成参考文献,详细讲解了核心工作流。同时推荐了ZotFile、Better BibTeX等必备插件,并介绍了利用同步与WebDAV实现跨设备无缝衔接的方法,助力研究者构建个人数字知识库,极大提升学术研究效率。

weixin_29281941的博客 1179

制作一个登录页面,运用正则表达式编写校验功能:要求输入的用户名和密码不能为空,用户名8位以上的字母组成,密码6位数字。

制作一个登录页面,运用正则表达式编写校验功能:要求输入的用户名和密码不能为空,用户名8位以上的字母组成,密码6位数字。 代码展示: <!doctype html> <html lang="en"> <head> <title>Document</title> <script> function loginOnclick(){ var username=document.getElementById("userna.

aigo_2021的博客 4424

基于Java+SpringBoot+Vue的中小企业设备管理系统的设计与开发(源码+lw+部署文档+讲解等)

💗博主介绍:✌新人博主,工作经验两年+、专注于Java、小程序技术领域和毕业项目实战✌💗🌟文末获取源码+数据库🌟

2301_76502068的博客 1385

正则表达式:输入框禁止输入空格、只能输入数字、字母、汉字等校验

columnEdit: [ {title: '用户名', dataIndex: 'username', edit: true, required: { max: 20 }, search: { type: 'like'}, validator: { pattern: /^[A-Za-z0-9]*$/, message: '用户名中不能包含非字母和数字的字符串' } }, {title: '姓名', dataIndex: 'name', edit: true, required: true, search:.

李韶华 1万+

ios开发拒绝“玄学”Crash:从循环引用到脏内存,构建你的系统性排查思维模型

你申请了内存,写了数据,这块内存就是脏的。系统无法直接回收它,除非你显式释放,或者系统把它 swap 出去(但在 iOS 上,Compressed Memory 机制虽然能压缩,但不会像桌面系统那样频繁 swap 到磁盘,一旦压缩内存也撑不住,你也得挂)。所以,排查 OOM 的核心心法只有一条:不要问“哪里漏了”,要问“每一刻,留在这个页面上的内存,凭什么必须在这里?一旦内存水位线逼近阈值(不同机型不同,老机器可能 600MB 就危,新机器能抗 1.5GB),系统发个警告。

大模型大数据攻城狮的专栏 727

机器学习扩散模型简介

​ 扩散模型是生成模型,在过去几年中越来越受欢迎,这是有充分理由的。仅在 2020 年代发布的几篇开创性论文就向世界展示了 Diffusion 模型的能力,例如在图像合成方面击败 GAN[6]。最近,从业者将看到DALL-E 2(OpenAI 上个月发布的图像生成模型)中使用的扩散模型。

gongdiwudu的专栏 4271

正则表达式

test2     $(function(){ $("#haha").blur(function(){ var name = $(this).val(); if(name == "" || name == null){ alert("姓名不能为空"); }else{ //定义正则规则 var reg = /[a-Z0-9]/; //匹配首字母大写的正则表达式; var

Cf1035630950的博客 295

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。

weixin_58069108的博客 930

html5 原生表单验证,html5表单原生自定义验证

这段时间在重构自己以前做的项目,在做到注册时花了不少时间,原先是打算做用户名,密码,确认密码,邮箱,手机这几个选项,但写了半天后测试发现有不少问题,就干脆删繁就简,只留下了用户名和密码两项按照设定,用户名要做唯一性检测,只能数字或字母,最大25位,密码则有很多条规则:1密码位数在6到25之间2密码不能是用户名或反转的用户名3密码不能是纯字母或纯数字4密码不能包含特殊符号5密码不能为简单密码,如ab...

weixin_26985923的博客 588

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Java语言面向对象】(49)正则表达式

基调: 很重要,不仅java有,后面js也有。 正则表达式简单的很简单,复杂的真复杂, 要求 会写简单的,复杂的会抄。 需求 注册用户名:长度至少5位,最多是10位 必须包含数字或字母 符合要求的即为有效用户名,否则无效。 用户名就是一个字符串,字符串要跟一个标准匹配,这个标准就可以使用正则表达式完成。 改造 必须包含数字+字母 --à发现有一点点难--à百度抄 如:email的正则表达式 手机号码 身份证。 ...

FairyKunKun的博客 308

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

js正则表达式验证用户名密码

1.js正则表达式用法 参考:https://www.runoob.com/js/js-regexp.html 2.验证用户名 var pat=/[\w\u4e00-\u9fa5]{6,12}/ var username="我是用户名2fjlj" var r=pat.exec(username) if(r!=null){ if(r.length==username.length){ alert("用户名合法") } else{ alert("用户名必须为6-12位字母/数字/中文").

justdoshare的博客 8893

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

用户名正则验证

1.Java验证用户名的正则表达式     @Test     public void formalRegex() {         String str = "123+123";                  Pattern pattern = Pattern.compile("[0-9a-zA-Z\u4E00-\u9FA5]+");         Matcher matcher = ...

我想起个名字的博客 3896

正则表达式验证表单

正则是用来描述字符规则的,常常用来做表单验证。先说下正则的创建和简单的使用吧! / / 是正则表达式的标识符 创建 字面量创建   var reg=/a/; 构造函数创建  var reg=new RegExp("a"); 使用:不能直接使用,需配合方法使用 字符:     str.match(reg)     str.replace(reg) ...

banliyou9765的博客 327

java户名的正则表达式_java – 用于验证用户名的正则表达式

我正在尝试创建一个正则表达式来根据这些条件验证用户名:>仅包含字母数字字符,下划线和点.>下划线和点不能在最后或用户名的开头(例如_username / username_ / .username / username.).>下划线和点不能彼此相邻(例如user_.name).> Underscore或dot不能连续多次使用(例如user _name / user..nam...

weixin_35187410的博客 533

java js账号密码验证_JS的常用正则表达式 验证密码用户名等

//校验是否全由数字组成function isDigit(s){var patrn=/^[0-9]{1,20}$/;if (!patrn.exec(s)) return falsereturn true}//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串Java代码function isRegisterUserName(s){var patrn=/^[a-zA-Z]{1}...

weixin_39761880的博客 90

邮箱正则表达式验证_玩转正则!推荐一个速查、调试、验证、可视化工具

作为一个程序员、当代码农,时不时你会需要去写点正则表达式。但是,正则它毕竟不是一门语言,不是所有的程序员都会,或者说非常精通,有时候,你会遇到非常奇葩的正则表达式,可能你又写不出来,老大还急着要!项目还离不了你的这个正则表达式。这时候,你肯定会抓耳挠腮,心想,要是有一个可以通过条件生成正则表达的工具,那该是有多好啊!在程序员的世界,哪里有需求,哪里就有开发,这不,还真就有这么一个吊炸天的...

weixin_39733812的博客 121

实现用户名字母数字大小写符号(正则表达式)

又称规则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。1. 灵活性、逻辑性和功能性非常强;2. 可以迅速地用极简单的方式达到字符串的复杂控制。^(?!!!!

mantangjojo的博客 4249

iOS判断邮箱,手机号,车牌号,车型,用户名,密码,昵称,身份证号,是否有效

- (BOOL)isValidateEmail:(NSString *)Email {     NSString *emailCheck = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";     NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"S

微微 1373

正则数字和字母 php,php 用户名正则表达式(中文,英文,数字,字母)

php教程 用户名正则表达式(中文,英文,数字,字母)由字母a~z(不区分大小写)、数字0~9、减号或下划线组成只能以数字或字母开头和结尾 用户名长度为4~18个字符^[a-za-z0-9]{1}[a-za-z0-9|-|_]{2-16}[a-za-z0-9]{1}$用户名为大写字母小写字母或下划线,并以字母开头,长度为6-20^[a-za-z][wd_]{5,19}用户名:包括英文小写、汉字、数...

weixin_33917217的博客 2445

验证邮件地址的Java正则表达式

最近写了个Java正则表达式来验证RFC 5322规范的邮件地址,这个邮件地址比较复杂,对于这样一个地址:userName@domainName,它满足以下条件: 对于userName 1、允许使用以下所有字符作为用户名: [A-Z], [a-z], [0-9], [.], [-], [_], [@], [!], [#], [$], [%], [&amp;amp;], [‘], [*]...

不积跬步,无以至千里 5776
上一篇: 请问JAVA要学会得要多长时间
下一篇: 跟老紫竹学Java的说明
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值