正则表达式详解:匹配键盘上所有特殊字符与字符控制

创始人
2024-12-14 17:21:03
0 次浏览
0 评论

正则表达式匹配各种特殊字符

输入可以匹配各种特殊字符的正则表达式((?=[\x21-\x7e]+)[^A-Za-z0-9])x21-\x7e]+)[^A-Za-z0-9])这匹配键盘上可见的所有非字母数字字符varpatrn=/[`~!@#$%^&*()_\-+=<>?"{}|,\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》[],;'',]/im;if(!patrn.test(str)){//如果包含特殊字符,则返回false;}returntrue这是框输入以防止输入特殊字符进行验证,包括所有特殊字符的英文和中文状态。
谢谢!}$3至少n位数字:^\d{n位数字:^\d{m,n}$5以零和非零开头的数字:^(0|[1-9][0-9]*)$6以非零开头的数字最多可以包含两位小数:^([1-9][0-9]*)+(.[0-9]{1,2})?$7保留1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$8正数、负数和小数数字:^(\-|\+)?\d+(\.\d+)?$9保留两位小数的正实数:^[0-9]+(.[0-9]{2})?$10为正实数,保留1~3位小数:^[0-9]+(.[0-9]{1,3})?11$非零正整数:^[1-9]\d*$或^([1-9][0-9]*){1,3}$或^\+?[1-9][0-9]*12美元非零负整数:^\-[1-9][]0-9"*$或^-[1-9]\d*$13非负整数:^\d+$或^[1-9]\d*|014$不四舍五入数字:^-[1-9]\d*|0$或^((-\d+)|(0+))$15浮点数非负:^\d+(\.\d+)?$或^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$16非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$或^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$17正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$或^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$18负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$或^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$19点数浮点数:^(-?\d+)(\.\d+)?$或^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$2、控制字符表达式1汉字:^[\u4e00-\u9fa5]{0,}$2英文和数字:^[A-Za-z0-9]+$或^[A-Za-z0-9]{4,40}$3全部3-20个字符长:^.{3,20}$426个英文的复合字符串字母:^[A-Za-z]+$5由26个大写字母组成的字符串英文:^[A-Z]+$6由26个小写字母组成英国A字符串字母:^[a-z]+$7一串数字和26个英文字母:^[A-Za-z0-9]+$8一串数字、26个英文字母或下划线字符串:^\w+$或^\w{3,20}$9中文、英文、数字含下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$10中文、英文、数字单词,但不包括下划线和其他符号:^[\u4E00-\u9FA5A-Za-z0-9]+$或^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$11可以输入包含^%&',=?$\"的字符:[^%&',=?$\x22]+12禁止输入含有~的字符:[^~\x22]+3.有特殊需要的表达式公式1Em邮件地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$a,自定义且完美的电子邮件验证:(java)^(([^<>()\\[\\]\\\\.\\s@\"]+(\\.[^<>()\\[\\]\\\\.\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$b、(js或jq)^(([^<>()\[\]\\.\s@"]+(\.[^<>()\[\]\\.\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$2域名:[a-zA-Z0-9][-a-zA-Z0-9]{0.62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?3InternetURL:[a-zA-z]+://[^\s]*或^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$4最后手机号码:^((13[0-9])|(14[5,7]|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$(周)^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$(js或jq)5电话号码(“XXX-XXXXXXX”、“XXXX-XXXXXXXXX”、“XXX-XXXXXXXX”、“XXX-XXXXXXXXX”、“XXXXXXXX”和“XXXXXXXXX”):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$6本地电话号码(0511-4405222,021-87888822):\d{3}-\d{8}|\d{4}-\d{7}7身份证号码(15位、18位):^\d{15}|\d{18}$8短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$或^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$9帐户是否合法(以字母开头,允许5-16个字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}密码$10(以开头开头)带字母,长度在6到18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$11强密码(必须包含大小写字母和数字的组合,无特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$12日期格式:^\d{4}-\d{1,2}-\d{1,2}13一年中的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$14每月31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)格式条目15美元货币:161.我们可以接受的货币有四种表示形式:“10000。
00”和“10,000.00”,以及不带“分”的“10000”和“10,000”:^[1-9][0-9]*$172。
这意味着任何不以0开头的数字,但这也将表示不传递“0”字符,因此我们使用以下形式:^(0|[1-9][0-9]*)$183一个0或非起始数字以0开头。
我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$194a可能是一个不以0开头的负数。
让用户从0开始。
还要去掉负号,因为Money不能为负数解释一下可能的小数部分:^[0-9]+(.[0-9]+)$205注意后面至少要有1位数字小数点,所以不传递“10”,而是传递“10”和“10.2”:^[0-9]+(.[0-9]{2})?$216这样我们就指定了小数point必须有两位数字如果你觉得太苛刻了,你可以这样做:^[0-9]+(.[0-9]{1,2})?这允许用户只输入下面一位小数是时候考虑数字中的逗号了,我们可以这样做:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{.1,2})?$238.1最多3个数字,后跟任意数量的逗号+3个数字。
3})*)(.[0-9]{1,2})?$24注意:这是最终结果,记住“+”可以替换为“*”,如果你认为空字符串也可以接受(奇怪,为什么?)最后,使用该函数时不要忘记删除反斜杠常见错误位于25xml文件中:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$26汉字正则表达式:[\u4e00-\u9fa5]27双字节字符:[^\x00-\xff](包括汉字,可用于计算字符串长度(两字节字符的长度计算为2,ASCII字符计为1))28空行正则表达式:\n\s*\r(可用于删除空行)29HTML标签正则表达式格式:<(\S*?)[^>]*>*?</\1>|30个前导和尾随空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$)(可用于去除空格。
行首和行尾字符)字符(包括空格、制表符、换页符等),非常有用的表达方式)31腾讯QQ号码:[1-9][0-9]{4,}(腾讯QQ号码从10000开始)32中国邮政编码:[1-9]\d{5}(?\d)(中国邮政编码为6数字)IP地址33:\d+\.\d+\.\d+\.\d+(在导出IP地址时有用)IP地址34:((?(?25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?25[0-5]|2[0-4]\\d|[01]?\\d?\\d))表达式常规可以为空,否则需要格式。
格式如下:^$|^(\d+|\-){7,}$(“|”后面的内容必须符合格式。
)如果空格可以是空格和制表符,则可以这样写this:^\s*$|^(\d+|\-){7,}regex$不为空,用\S来匹配,不带空格的话,可以用[^]来匹配匹配。
[]中的^后面有一个空格。
[尺寸=12px]1。
^d+$//匹配非负整数(正整数+0)2.^[0-9]*[1-9][0-9]*$//匹配正整数3.^((-d+)|(0+))$//匹配非正整数(负整数+0)4.^-[0-9]*[1-9][0-9]*$//匹配个数负整数5.^-?d+$//匹配整数6.^d+(.d+)?$//匹配非负浮点数(正浮点数+0)7.^(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0.-9]+)|([0-9]*[1-9][0-9]*))$//匹配正浮点数8。
^((-d+(.d+)?)|(0+(.0+)?))$//匹配非正浮点数(负浮点数+0)9.^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*。
[0-9]+)|([0-9]*[1-9][0-9]*)))$//匹配负浮点数10。
^(-?d+)(.d+)?$//匹配浮点数11。
^[A-Za-z]+$//匹配26个英文字母组成的字符串12.^[A-Z]+$//匹配由26个大写英文字母组成的字符串13.^[a-z]+$//匹配a字符串14,由26个小写英文字母组成。
^[A-Za-z0-9]+$//匹配由数字和26个英文字母组成的字符串15。
^w+$//匹配由数字、26个英文字母或下划线组成的字符串16。
^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$//匹配邮箱地址17.^[a-zA-z]+://match(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$//匹配url18.匹配汉字的正则表达式:[u4e00-u9fa5]19。
匹配双字节字符(包括汉字):[^x00-xff]20。
应用:计算字符串的长度(双字节字符长度计为2,ASCII字符长度计为1)String.prototype.len=function(){returnthis.replace([^x00-xff)]/g“aa”);}21.匹配空行的正则表达式:n[s|]*r22。
正则表达式匹配HTML标签:/<(.*)>*|<(.*)/>/23.正则表达式匹配前导空格和尾随空格:(^s*)|(s*$)*正则表达式用例*1,^S+[a-zA-Z]$不能为空,不能有空格,只能是英文字母*2、S{6,}不能为空十六进制以上*3、^d+$不能有空格且不能是非数字*4、(.*)(.jpg|.bmp)$只能是jpg和bmp格式*5,^d{4}-d{1,2}-d{1,2}$只能是2004-10-22格式*6,^0$至少选择一项*7,^0{2,}$至少选择两项*8,^[s|S]{20,}$超过20不能为空字符*9、^+?[a-z0-9](([-+.]|[_]+)?[a-z0-9]+)*@([a-z0-9]+(.|-))+[a-z]{2,6}$mail*10.w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*([,]s*w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*)*输入多个地址,以逗号或空格分隔*11.^(([0-9]+))?[0-9]{7,8}$电话号码为7或8位数字或前面带有区号,例如例如(022)87341628*12,^[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(.[a-zA-Z0-9_]+)+(,[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(.[a-zA-Z0-9_]+)+)*$*只能是字母,数字和下划线,必须包含@和。
同时,电子邮件的格式也要标准化*13^w+@w+(.w+)+(,w+@w+(.w+)+;)*$上述表达式也可以写成这样,更简洁。
14^w+((-w+)|(.w+))*@w+((|-)w+)*.w+$[/size]总结

正则表达式字符匹配

水平二义性是指正则表达式能够匹配的字符串长度不固定,可以有多种情况

实现的方式是使用量词。
例如,{m,n}表示连续出现至少m次,最多n次。

垂直歧义是指正则匹配的字符串,当涉及到某个特定字符时,可能不是一个特定的字符。
给定的字符有多种可能性

实现它们的方法是使用字符集。
例如,[abc]表示一个字符可以是字母a、b或c中的任意一个

需要强调的是,虽然称为字符集(字符类),但它只是其中一个字母

比如[abc]表示匹配一个字符,可以是a、b、c之一

如果字符中字符太多怎么办放?可以使用范围符号。

例如,[123456abcdefGHIJKLM]可以写成[1-6a-fG-M]。
使用破折号-进行删除和缩写

由于破折号有特殊用途,如果想匹配a、-、z这三个字母中的任意一个怎么办?

不能写成[a-z],因为它代表任意小写字母

即必须放在开头、结尾或者转义。
总之,不要让引擎认为它是范围表示。

这时候就用到了排除字符集(相反字符集)的概念。
例如,[^abc]表示除a、b、c之外的任意字符。
字符集中的第一个字母是^(插入符号),它代表否定的概念。

当然还有对应范围的表示

如果想匹配任意字符怎么办?您可以使用[\d\D]、[\w\W]、[\s\S]和[^]

量词也称为迭代器。
掌握了{m,n}的确切含义后,只需记住一些缩写

常规模式/\d{2,5}/表示该数字连续出现2到5次。
它将匹配连续的2位、3位、4位和5位数字。

但是他很贪心,会匹配尽可能多的。
如果你能给我6个,我要5个,如果你能给我3个,我就3个

反正只要在能力范围内,越多越好

我们知道,有时候贪婪并不是一件好事(例子请见文末)。
惰性匹配是指尽可能少的匹配:

其中,/\d{2,5}?/表示虽然2到5次就够了,但是当2次就够了的时候,我就不再尝试什么

可以通过在量词后面添加问号来实现惰性匹配,所以所有...匹配慢的情况如下:

该模式可以实现水平和垂直的模糊匹配。
一个多选分支可以支持多种子模式可供选择

具体形式如下:(p1|p2|p3),其中p1、p2、p3为子模式,用|。
(管道字符),指其中任何一个

但是有一个事实我们要注意,比如我用/good|goodbye/来匹配goodbyou字符串,结果是好的:

并且将正则表达式改为/goodbye|good/,结果为:

也就是说,分支结构也是惰性的,即当前面的匹配成功时,我们不再尝试下面的

匹配字符无非是字符集的组合量词和子结构。

我们找一些例子来练习一下(其中,每个正则表达式并不是唯一的写法):

需要匹配:

字符可以出现3、6次时,需要使用量词和子结构

使用子结构时,需要注意顺序

正常规则如下:

以订单24小时为例

要求匹配:

分析:

正则表达式如下:

如果还需要匹配7:9,即前面的0小时和分钟可以省略

此时正则表达式变为:

例如格式yyyy-mm-dd为例

必填匹配:

解析:

正常规则如下如下:

所需匹配为:

分析:

一般模式为:

匹配F:\时,您必须使用[a-zA-Z]:\\。
注意\字符必须是转义的

此时文件名或者文件夹名不能包含一些特殊字符,我们需要排除字符集[^\\:*<>|"?\r\n/]供参考。

此外,文件夹```可以出现任意多次,即([^\\:*<>|"?\r\n/)]+\\)*。

括号表示内部正则表达式就是全部。
详细内容请参考第3章

最后被分解为看似复杂的正则模式:

其中,在JavaScript中字符串当代表字符\时,它也必须转义

要求

最初可能想到的正常规则是:

因为通配符和匹配引号,量词*在以下情况下是贪婪的:有双引号ontainer之后就停不下来它会继续匹配,直到遇到最后一个双引号。

解决方案是使用惰性匹配:

当然这种方式也会有问题。
效率比较低,因为它的匹配原理包含了“回溯”的概念(这个顺便提一下,后面会详细解释)。
可以进行如下改进:

热门文章
1
C语言字符串常量解析:区别、用途及存储方... 什么是字符串常量字符串常量是C语言中的一种数据类型,它是由一对双引号括起来的字符...

2
C语言printf函数:格式字符串与输出... printf函数中的格式与输出项有什么关系?在C语言中,printf函数中的格式...

3
Excel技巧:计算字符串起始位置与合并... 如何计算字符串在特定文本中的起始位置,怎么计算字符串在特定文本中的起始位置您可以...

4
Python发音全解:掌握正确的发音方法... python怎么读我的很多学习编程的朋友可能都知道Python这个词,但是他们中...

5
字符与字符串:编程中的基础文本类型解析 字符串什么意思字符串是由数字、字母和下划线组成的字符串,表示为s=“a1a2…a...

6
Python编程语言:多领域应用与开发优... Python的作用是什么?Python是一种跨平台计算机编程语言,是ABC语言的...

7
深度解析:C语言编程特点与应用领域 什么叫c语言C语言是一种编程语言。C编程语言应用广泛,具有以下特点和特点:1.语...

8
Java全解析:跨平台编程语言的魅力与多... java是什么Java是一种功能强大的编程语言,被称为“一次编写,随处运行”模型...

9
C语言文本文件指定行输出技巧及汉字处理方... C语言如何从文本文件中输出指定行文字#include#include#inclu...

10
C语言字符串长度与内存占用解析:空字符与... 内存中的长度在C中,字符串的长度和字符串在内存中占用的字节数是两个概念。(1)长...