正则表达式的匹配规则:
单个字符的匹配规则如下:
正则表达式 | 规则 | 可以匹配 |
---|---|---|
A | 指定字符 | A |
\u548c | 指定Unicode字符 | 和 |
. | 任意字符 | a ,b ,& ,0 |
\d | 数字0~9 | 0 ~9 |
\w | 大小写字母,数字和下划线 | a ~z ,A ~Z ,0 ~9 ,_ |
\s | 空格、Tab键 | 空格,Tab |
\D | 非数字 | a ,A ,& ,_ ,…… |
\W | 非\w | & ,@ ,中 ,…… |
\S | 非\s | a ,A ,& ,_ ,…… |
多个字符的匹配规则如下:
正则表达式 | 规则 | 可以匹配 |
---|---|---|
A* | 任意个数字符 | 空,A ,AA ,AAA ,…… |
A+ | 至少1个字符 | A ,AA ,AAA ,…… |
A? | 0个或1个字符 | 空,A |
A{3} | 指定个数字符 | AAA |
A{2,3} | 指定范围个数字符 | AA ,AAA |
A{2,} | 至少n个字符 | AA ,AAA ,AAAA ,…… |
A{0,3} | 最多n个字符 | 空,A ,AA ,AAA |
复杂匹配规则如下:
正则表达式 | 规则 | 可以匹配 |
---|---|---|
^ | 开头 | 字符串开头 |
$ | 结尾 | 字符串结尾 |
[ABC] | […]内任意字符 | A,B,C |
[A-F0-9xy] | 指定范围的字符 | A-F,0-9,x-y |
[^A-F] | 指定范围外的任意字符 | 非A~F |
AB\|CD\|EF | AB或CD或EF | AB,CD,EF |
正则验证用户名
题目:用户必须4到16位且只能包含中文、大小写字母、和数字
//实现正则
^[\u4e00-\u9fa5A-Za-z0-9]{4,16}
java代码测试
public class matching_rule {
public static void main(String[] args) throws Exception {
//用户必须4到16位且只能包含中文、大小写字母、和数字
String re = "^[\\u4e00-\\u9fa5A-Za-z0-9]{4,16}";
for (String s : Arrays.asList("张梅里25", "李四怕14", "张国实23"))
if (!s.matches(re)) {
System.out.println("测试失败: " + s);
return;
}
for (String s : Arrays.asList("wasdas——12", "*wangxiaomei*", "¥level¥","三大中心飒飒撒达娃说的啊圣诞袜伟大1582"))
if (s.matches(re)) {
System.out.println("测试失败: " + s);
return;
}
System.out.println("测试成功!");
}
}
通过iframe跨域与其他页面通信的方式其一
postMesssage
postMessage 是 HTML5 新增加的一项功能,跨文档消息传输(Cross Document Messaging),目前:Chrome 2.0+、Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, 和 Safari 4.0+ 都支持这项功能。
跨域postMesssage测试
首先使用Linux搭建一个服务器环境然后基于域名创建两个网站,linux端和本机配置好hosts文件,接下来模拟子界面从主界面获取cookie的操作,下面是子页面和主页面的html代码
//子界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>子页面</title>
</head>
<body>
<div>
<h1>子页面</h1>
</div>
</body>
<script>
console.log(document.cookie);
</script>
</html>
//主界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主页面</title>
</head>
<body>
<iframe id="myIframe" src="http://www.lesson2.com/index.html" frameborder="2"></iframe>
</body>
<script>
document.cookie = "cookie=root";
</script>
</html>
下面在浏览器中访问主页面按F12查看控制台发现子页面并没有获取到主页面的Cookic
这是因为这两个网站是跨域的无法直接通过正常方式获取到Cookic,下面使用postMesssage重新编写:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>子页面</title>
</head>
<body>
<div>
<h1>子页面</h1>
</div>
</body>
<script>
window.addEventListener('message', (event) => {
console.log(event)
if (event.origin === 'http://www.lesson1.com') {
const cookieData = event.data;
//处理cookieData
console.log('Receive message from parent:', cookieData);
window.parent.postMessage('child message', '*');
}
})
</script>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主页面</title>
</head>
<body>
<iframe id="myIframe" src="http://www.lesson2.com/index.html" frameborder="2"></iframe>
</body>
<script>
window.onload = function() {
//将cookie发送给子页面
document.cookie = 'sessionid=root'
const cookieData = document.cookie
//发送给子页面
window.frames[0].postMessage(cookieData, 'http://www.lesson2.com/');
}
//添加一个监听事件处理子页面的返回消息
window.addEventListener('message', (event) => {
if(event.origin === 'http://www.lesson2.com')
console.log('Received message from child:', event.data);
})
</script>
</html>
通过父页面将cookic发送给子页面,子界面监听到父页面发送的cookic然后将消息回传给夫界面,夫界面监听到子页面回传的消息通过console.log('Received message from child:', event.data);这种方式打印到控制台就完成了跨域postMesssage的测试