`

正则表达式非法字符验证[1]

阅读更多

正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番.我将一些常用的表达式收藏在这里,作备忘之用.本贴随时会更新.
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:1>
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
String.prototype.trim = function()
return this.replace(/(^\s*)|(\s*$)/g, "");
利用正则表达式分解和转换IP地址:
下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
function IP2V(ip)
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
else
throw new Error("Not a valid IP address!")
不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-w-]+(/[\w-
利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]
var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //结果为:abcefgi
我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法.思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连.这个方法对于字符顺序有要求的字符串可能不适用.
得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1
s="http://www.9499.net/page1.htm"
s=s.replace(0,ig,"$2")
alert(s)
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
另外从baidu 的知道里边拿到些信息:
正则表达式的构造摘要
构造 匹配
字符
x 字符 x
\\ 反斜线字符
\0n 带有八进制值 0 的字符 n (0 <= n <= 7)
\0nn 带有八进制值 0 的字符 nn (0 <= n <= 7)
\0mnn 带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh 带有十六进制值 0x 的字符 hh
\uhhhh 带有十六进制值 0x 的字符 hhhh
\t 制表符 ('\u0009')
\n 新行(换行)符('\u000A')
\r 回车符 ('\u000D')
\f 换页符 ('\u000C')
\a 报警 (bell) 符('\u0007')
\e 转义符 ('\u001B')
\cx 对应于 x 的控制符
字符类
[abc] a、b 或c(简单类)
[^abc] 任何字符,除了 a、b 或c(否定)
[a-zA-Z] a 到z或A到Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到d或m到p:[a-dm-p](并集)
[a-z&&[def]] d、e 或f(交集)
[a-z&&[^bc]] a 到z,除了 b 和c:[ad-z](减去)
[a-z&&[^m-p]] a 到z,而非 m 到p:[a-lq-z](减去)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
POSIX 字符类(仅US-ASCII)
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
\p{ASCII} 所有 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十进制数字:[0-9]
\p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}]
\p{Punct} 标点符号:
\p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或制表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{XDigit} 十六进制数字:[0-9a-fA-F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]
java.lang.Character 类(简单的 java 字符类型)
\p{javaLowerCase} 等效于 java.lang.Character.isLowerCase()
\p{javaUpperCase} 等效于 java.lang.Character.isUpperCase()
\p{javaWhitespace} 等效于 java.lang.Character.isWhitespace()
\p{javaMirrored} 等效于 java.lang.Character.isMirrored()
Unicode 块和类别的类
\p{InGreek} Greek 块(简单块)中的字符
\p{Lu} 大写字母(简单类别)
\p{Sc} 货币符号
\P{InGreek} 所有字符,Greek 块中的除外(否定)
[\p{L}&&[^\p{Lu}]] 所有字母,大写字母除外(减去)
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次X{n,} X,至少 n 次X{n,m} X,至少 n 次,但是不超过 m 次Reluctant 数量词
X?? X,一次或一次也没有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次X{n,}? X,至少 n 次X{n,m}? X,至少 n 次,但是不超过 m 次Possessive 数量词
X?+ X,一次或一次也没有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次X{n,}+ X,至少 n 次X{n,m}+ X,至少 n 次,但是不超过 m 次Logical 运算符
XY X 后跟 Y
X|Y X 或Y(X) X,作为捕获组
Back 引用
\n 任何匹配的 nth 捕获组
引用
\ Nothing,但是引用以下字符
\Q Nothing,但是引用所有字符,直到 \E
\E Nothing,但是结束从 \Q 开始的引用
特殊构造(非捕获)
(?:X) X,作为非捕获组
(?idmsux-idmsux) Nothing,但是将匹配标志由 on 转为 off
(?idmsux-idmsux:X) X,作为带有给定标志 on - off 的非捕获组
(?=X) X,通过零宽度的正 lookahead
(?!X) X,通过零宽度的负 lookahead
(?<=X) X,通过零宽度的正 lookbehind
(?<!X) X,通过零宽度的负 lookbehind
(?>X) X,作为独立的非捕获组

反斜线、转义和引用
反斜线字符 ('\') 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符.因此,表达式 \\ 与单个反斜线匹配,而\{ 与左括号匹配.
在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的.可以在非字母字符前使用反斜线,不管该字符是否非转义构造的一部分.
根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义.因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释.例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而"\\b" 与单词边界匹配.字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)".
字符类
字符类可以出现在其他字符类中,并且可以包含并集运算符(隐式)和交集运算符 (&&).并集运算符表示至少包含其某个操作数类中所有字符的类.交集运算符表示包含同时位于其两个操作数类中所有字符的类.
字符类运算符的优先级如下所示,按从最高到最低的顺序排列:
1 字面值转义 \x
2 分组 [...]
3 范围 a-z
4 并集 [a-e][i-u]
5 交集 [a-z&&[aeiou]]
注意,元字符的不同集合实际上位于字符类的内部,而非字符类的外部.例如,正则表达式 . 在字符类内部就失去了其特殊意义,而表达式 - 变成了形成元字符的范围.
行结束符
行结束符 是一个或两个字符的序列,标记输入字符序列的行结尾.以下代码被识别为行结束符:
新行(换行)符('\n')、
后面紧跟新行符的回车符 ("\r\n")、
单独的回车符 ('\r')、
下一行字符 ('\u0085')、
行分隔符 ('\u2028') 或
段落分隔符 ('\u2029).
如果激活 UNIX_LINES 模式,则新行符是惟一识别的行结束符.
如果未指定 DOTALL 标志,则正则表达式 . 可以与任何字符(行结束符除外)匹配.
默认情况下,正则表达式 ^ 和$忽略行结束符,仅分别与整个输入序列的开头和结尾匹配.如果激活 MULTILINE 模式,则^在输入的开头和行结束符之后(输入的结尾)才发生匹配.处于 MULTILINE 模式中时,$ 仅在行结束符之前或输入序列的结尾处匹配.
组和捕获
捕获组可以通过从左到右计算其开括号来编号.例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)
组零始终代表整个表达式.
之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列.捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器检索.
与组关联的捕获输入始终是与组最近匹配的子序列.如果由于量化的缘故再次计算了组,则在第二次计算失败时将保留其以前捕获的值(如果有的话)例如,将字符串 "aba" 与表达式 (a(b)?)+ 相匹配,会将第二组设置为 "b".在每个匹配的开头,所有捕获的输入都会被丢弃.
以(?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数.

 

分享到:
评论

相关推荐

    正则表达式不包涵特殊字符(除了 指定字符 以外)

    在探讨如何利用正则表达式来判断一个...这种方法不仅适用于简单的字符验证场景,还可以扩展应用于更复杂的数据清洗和格式化任务中。对于开发者而言,熟练掌握正则表达式的编写技巧对于提高代码质量和效率具有重要意义。

    jq非空验证,js正则表达式验证邮箱和手机号码

    这个正则表达式会检查字符串是否以1开头,且后面跟了10位数字。 3. **HTML**: HTML是构建网页的基础,我们在其中定义表单元素(如`<input>`标签)以获取用户输入。为了实现上述验证,我们需要在HTML中添加`...

    只验证数字和字母的正则表达式

    2. **安全性**:虽然该正则表达式能有效过滤非法字符,但在实际应用中还需结合其他安全措施来进一步增强系统的安全性。 3. **用户体验**:合理的错误提示信息能够帮助用户更好地理解输入要求,提升用户体验。 综上...

    正则表达式 Java 判断字串是否合理

    正则表达式是一种强大的文本处理工具,它能够帮助我们匹配、查找、替换等操作符合某种规则的字符串。在Java中,通过`java.util.regex`包提供了对正则表达式的支持。 ### 2. 邮箱地址验证 在实际应用中,经常需要...

    javascript正则表达式表单验证大全

    使用onkeyup和onbeforepaste事件监听器,结合正则表达式,可以实时过滤用户的输入,限制只能输入特定类型的字符,如仅允许中文、英文或数字,有效防止非法输入,提高数据安全性。 以上正则表达式及其应用,覆盖了从...

    利用正则表达式巧妙解析度分秒格式字符串

    在编程领域,正则表达式是一种强大的文本处理工具,它能帮助我们进行复杂的字符串匹配、查找、替换和解析。在本话题中,我们将探讨如何利用C#中的正则表达式来巧妙地解析度分秒格式的字符串,将其转换为统一的度数...

    IP地址的正则表达式

    给定的正则表达式为:(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{...

    js正则表达式限制文本框只能输入数字,能输小数点.

    在JavaScript中,正则表达式通常用于字符串操作,例如验证表单输入、搜索文本以及替换字符等。 #### 2. 验证数字和小数点的正则表达式 要限制文本框只能输入数字并允许小数点,可以使用如下的正则表达式: ```...

    常用各类验证 正则表达式

    非法字符验证 在某些情况下,我们需要避免用户输入某些特定的非法字符。例如: ```javascript /[^a-zA-Z0-9\u4e00-\u9fa5]/ ``` 这个正则表达式可以用来验证输入中是否含有除了英文字母、数字以及汉字之外的其他...

    很强大美观的Regex正则表达式测试工具

    后端开发中,正则表达式则常用于数据清洗、过滤非法请求以及数据提取等任务。不论是在前端还是后端,熟练掌握正则表达式都能极大地提高开发效率。 通过运行压缩包中的"工具_正则表达式测试.exe"文件,开发者可以...

    简单的正则表达式

    在IT行业中,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,用于匹配、查找、替换或验证字符串模式。在VB.NET编程环境中,正则表达式库提供了丰富的功能,使得开发者能够轻松地处理复杂的...

    C#利用正则表达式验证网址

    总结来说,C#通过正则表达式验证URL是一项基本而重要的任务,可以有效地防止非法数据输入,提高应用的安全性和用户体验。正确理解和运用正则表达式,对于提升软件质量具有重大意义。通过不断学习和实践,你可以掌握...

    验证日期正则表达式推导方法

    正则表达式(Regular Expression)是一种强大的文本处理工具,能够用来匹配、查找、替换符合特定模式的字符串,其中包括验证日期格式的正确性。本文将深入探讨如何通过正则表达式推导出能涵盖闰年判断的日期验证方法...

    正则表达式之道

    - **数据清洗**:去除文本中的非法字符或格式化数据。 - **格式验证**:如验证邮箱、电话号码的正确性。 - **信息提取**:从大量文本中抽取关键信息,如日期、价格等。 - **文本替换**:批量替换文本中的某些模式。 ...

    Java过滤特殊字符的正则表达式.doc

    例如,在实际项目中,可能需要过滤用户输入的非法字符,或者从大量文本数据中提取有用的信息,这些都可以借助正则表达式的强大功能来实现。 总结来说,Java 中的正则表达式是非常有用的工具,它可以帮助我们高效地...

    js正则表达式限制文本框只能输入字母和汉字

    - **提示信息**:在用户输入非法字符时显示提示信息。 - **输入反馈**:通过颜色变化等方式给予用户直观的反馈。 - **多语言支持**:如果应用面向全球用户,需要考虑其他语言的支持。 通过这种方式,我们可以有效地...

    正则表达式大全笔记总结

    本文将对几个常见的正则表达式应用场景进行总结,包括中国电话号码验证、邮政编码验证、电子邮件验证、身份证验证、常用数字验证、非法字符验证以及日期验证等。 #### 二、知识点详解 ##### 2.1 中国电话号码验证 ...

    易语言正则表达式对象

    1. `正则表达式匹配`:用于检测字符串是否符合指定的正则表达式模式。返回值为布尔型,表示匹配成功与否。 2. `正则表达式替换`:用新的字符串替换原字符串中符合模式的部分。返回替换后的字符串。 3. `正则表达式...

Global site tag (gtag.js) - Google Analytics