正则表达式:其实就是一种匹配规则,用于检索字符串
定义正则表达式的两种方式:1.直接定义 2.构造函数定义
那么正则表达式正则强大的地方是它可以写 通配符(拥有特殊含义的字符)
二. 通配符
\w 表示:字母、数字、下划线
\W 表示:除了字母、数字、下划线以外的字符
\d 表示:数字
\D 表示:非数字
^ 表示:以^符号后面的第一个字符开头
表示:以表示:以符号前面的第一个字符结尾
{n} 表示:重复n次
{n,m} 表示:重复n到m次
[xyz] 表示:其中任意一个字符
+ 表示:重复前一项1次或多次 等价于 {1,}
* 表示:重复前一项0次或多次 等价于 {0,}
? 表示:重复前一项0次或1次 等价于 {0,1}
. 表示:除了换行符以外的任意一个字符
\. 表示:.字符 ^ 表示:^ \表示:表示:
可以用()将多个字符作为一个整体
\w 等价于 [0-9a-zA-Z_]
| 表示:或者
[\u4E00-\u9FA5] 是常用汉字的unicode编码范围
三. 正则练习
四. 正则表达式配合字符串的方法
replace()方法
默认情况下,replace()方法,只会替换字符串中匹配的第一段内容
使用正则表达式,添加全局匹配修饰符g,可以替换匹配全部内容
使用正则表达式,添加忽略大小写修饰符i,在匹配内容时会忽略大小写
search()方法
可以通过正则表达式查找位置
五. 添加学生练习
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>添加学生</title>
<style>
.err{
color: red
}
.ok{
color: green
}
</style>
</head>
<body>
<form>
<table>
<tr>
<td>姓名:</td>
<td>
<input type="text" id="name">
<span id="nameMsg"></span>
</td>
</tr>
<tr>
<td>年龄:</td>
<td>
<input type="text" id="age">
<span id="ageMsg"></span>
</td>
</tr>
<tr>
<td>性别:</td>
<td>
<input checked name="sex" type="radio" value="0">男
<input name="sex" type="radio" value="1">女
</td>
</tr>
<tr>
<td>爱好:</td>
<td>
<input name="hobby" type="checkbox" value="抽烟">抽烟
<input name="hobby" type="checkbox" value="喝酒">喝酒
<input name="hobby" type="checkbox" value="烫头">烫头
<input name="hobby" type="checkbox" value="睡觉">睡觉
</td>
</tr>
<tr>
<td>年级:</td>
<td>
<select id="grade">
<option value="0">请选择</option>
<option value="1">大一</option>
<option value="2">大二</option>
<option value="3">大三</option>
<option value="4">大四</option>
</select>
<span id="gradeMsg">必须要选择一个年级</span>
</td>
</tr>
<tr>
<td>邮箱:</td>
<td>
<input type="text" id="email">
<span id="emailMsg">请输入正确的邮箱格式</span>
</td>
</tr>
<tr>
<td>电话:</td>
<td>
<input type="text" id="phone">
<span id="phoneMsg">请输入正确的电话格式</span>
</td>
</tr>
<tr>
<td>生日:</td>
<td>
<input type="text" id="bornDate">
<span id="bornDateMsg">请输入正确日期格式</span>
</td>
</tr>
<tr>
<td></td>
<td>
<button type="submit">提交</button>
<button type="reset">重置</button>
</td>
</tr>
</table>
</form>
<script>
//获取姓名文本框
let name = document.querySelector('#name')
//获取年龄文本框
let age = document.querySelector('#age')
//表单的提交事件
document.querySelector('form').onsubmit = function(){
// 返回true提交表单,返回false不提交表单
if(checkName() &checkAge()){
return true
}else{
return false
}
}
//姓名文本框失去焦点
name.onblur = checkName
//验证姓名
function checkName(){
//定义验证姓名的正则
let reg = /^[\u4E00-\u9FA5]{2,4}$/
// 调用验证方法
return checkInput("#nameMsg",name,reg,'姓名正确','姓名必须是2-4位汉字')
}
//年龄文本框失去焦点
age.onblur = checkAge
//验证年龄
function checkAge(){
//定义验证年龄的正则
let reg = /^\d{1,2}$|^1([0-1]\d)|20$/
// 调用验证方法
return checkInput("#ageMsg",age,reg,'年龄正确','年龄必须是0-120之间')
}
//验证方法,参数分别是:span元素Id,表单元素对象,正则规则,验证成功消息,验证失败消息
function checkInput(spanId,_this,reg,okMsg,errMsg){
// 获取消息span
let span = document.querySelector(spanId)
//获取信息
let val = _this.value
if(!reg.test(val)){
span.className="err"
span.innerHTML = errMsg
return false //验证失败返回false
}else{
span.className="ok"
span.innerHTML = okMsg
return true //验证成功返回true
}
}
</script>
</body>
</html>
很明显啊var age = document.getElementById("age").Value
这个不是纯数字类型啊 如何匹配呀
你换成var age = 12;
和var age = asd
分别试试就知道了
给你一个日历控件<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Language" content="zh-cn" />
<meta http-equiv="Content-Type" content="text/htmlcharset=utf-8" />
<title>JCalendar 日历控件</title>
<style type="text/css">
#calendar {
border-collapse:collapse
border:1px solid #06C
background-color:#FFF
width:160px
height:120px
font-size:12px
font-family:'Lucida Grande','Lucida Sans Unicode','宋体','新宋体',arial,verdana,sans-serif
cursor:default
}
#calendar td {
text-align:center
vertical-align:middle
font-family:"宋体"
}
#calendar thead {
background-color:#06C
color:#FFF
}
#calendar div {
width:100%
height:100%
}
#calendar caption span {
cursor:pointer
}
#calendar #calendar_title {
cursor:default
}
</style>
<script type="text/javascript">
/***************************
*JCalendar日历控件
*@author brull
*@email [email]brull@163.com[/email]
*@date 2007-4-16
***************************/
/*
*@param year 年份
*@param month 月份
*@param date 日期
*/
/*如果参数不足三个那么就初始化为当天日期*/
function JCalendar (year,month,date) {
var _date = arguments.length == 0 ? new Date() : new Date(year,month-1,date)
//实例变量
this.year = _date.getFullYear()
this.month = _date.getMonth() + 1
this.fday = new Date(this.year,this.month-1,1).getDay()//每月第一天的前一天星期数
this.dayNum = new Date(this.year,this.month,0).getDate()//每月的天数
//成员变量,当前年月日
JCalendar.cur_year = this.year
JCalendar.cur_month = this.month
JCalendar.cur_date = _date.getDate()
}
JCalendar.prototype.show = function(){
var date = new Array(this.fday >0 ? this.day : 0)//预先定义一段空数组,对应日历里第一周空的位置
var html_str = new Array()
var date_index = 0
var weekDay = ["日","一","二","三","四","五","六"]
for(var j = 1j <= this.dayNumj++){//初始化date数组
date.push(j)
}
html_str.push("<table id='calendar'>")
html_str.push("<caption><span title='上一年份' onmouseover=\"this.style.color='#F90'\" onmouseout=\"this.style.color='#09F'\" onclick=\"JCalendar.update(-12)return false\" style='color:#09Ffont-size:16pxmargin-right:5px'>«</span><span title='上一月份' onmouseover=\"this.style.color='#F90'\" onmouseout=\"this.style.color='#09F'\" onclick=\"JCalendar.update(-1)return false\" style='margin-right:15pxcolor:#09F'>▲</span><span id='calendar_title'>" + this.year + "年" + this.month + "月</span><span title='下一月份' onclick=\"JCalendar.update(1)return false\" onmouseover=\"this.style.color='#F90'\" onmouseout=\"this.style.color='#09F'\" style='margin-left:15pxcolor:#09F'>▼</span><span title='下一年份' onclick=\"JCalendar.update(12)return false\" onmouseover=\"this.style.color='#F90'\" onmouseout=\"this.style.color='#09F'\" style='font-size:16pxmargin-left:5pxcolor:#09F'>»</span></caption>")
html_str.push("<thead><tr>")
for(var i = 0i <7i++){//填充日历头
html_str.push("<td>" + weekDay[i] + "</td>")
}
html_str.push("</tr></thead>")
html_str.push("<tbody>")
for(var i = 0i <6i++){//填充日期
html_str.push("<tr>")
for(var j = 0j <7j++){
tmp = date[date_index++]
tmp = tmp ? tmp : ""
if(JCalendar.cur_date == tmp)
html_str.push("<td><span id='c_today' style='background-color:#036color:#FFF'>" + JCalendar.cur_date + "</span></td>")
else if(tmp == "")
html_str.push("<td></td>")
else
html_str.push("<td><div onmouseover=\"this.style.backgroundColor='#CCC'\" onmouseout=\"this.style.backgroundColor=''\" onclick='JCalendar.click(this)'>" + tmp + "</div></td>")
}
html_str.push("</tr>")
}
html_str.push("</tbody></table>")
return html_str.join("")
}
//静态方法
JCalendar.update = function(_month){
var date = new Date(JCalendar.cur_year,JCalendar.cur_month - 1 + _month,1)
var fday = date.getDay()//每月第一天的星期数
var year = date.getFullYear()
var month = date.getMonth() + 1
var dayNum = new Date(JCalendar.cur_year,JCalendar.cur_month + _month,0).getDate()//每月的天数
var tds = document.getElementById("calendar").getElementsByTagName("td")
for(var i = 7i <tds.lengthi++)//清空日历内容
tds[i].innerHTML = ""
document.getElementById("calendar_title").innerHTML = year + "年" + month + "月"//更新显示年月
//更新当前年月
JCalendar.cur_year = year
JCalendar.cur_month = month
for(var j = 1j <= dayNumj++){
if(j == JCalendar.cur_date)
tds[6 + fday + j].innerHTML = "<span id='c_today' style='background-color:#036color:#FFF'>" + JCalendar.cur_date + "</span>"
else
tds[6 + fday + j].innerHTML = "<div onmouseover=\"this.style.backgroundColor='#CCC'\" onmouseout=\"this.style.backgroundColor=''\" onclick='JCalendar.click(this)'>" + j + "</div>"
}
JCalendar.onupdate(year,month,JCalendar.cur_date)
}
JCalendar.onupdate = function(year,month,date){//日历更改时执行的函数,可以更改为自己需要函数,控件传递过来的参数为当前日期
alert(year + "年" + month + "月" + date + "日")
}
JCalendar.click = function(obj){
var tmp = document.getElementById("c_today")
tmp.parentNode.innerHTML = "<div onmouseover=\"this.style.backgroundColor='#CCC'\" onmouseout=\"this.style.backgroundColor=''\" onclick='JCalendar.click(this)'>" + tmp.innerHTML + "</div>"
JCalendar.cur_date = parseInt(obj.innerHTML)
obj.parentNode.innerHTML = "<span id='c_today' style='background-color:#036color:#FFF'>" + obj.innerHTML + "</span>"
JCalendar.onclick(JCalendar.cur_year,JCalendar.cur_month,JCalendar.cur_date)
}
JCalendar.onclick = function(year,month,date){//点击日期时执行的函数,可以更改为自己需要函数,控件传递过来的参数为当前日期
alert(year + "年" + month + "月" + date + "日")
}</script>
</head>
<body>
<div id="calendar_contain"></div>
<script type="text/javascript">
/***************说明***************
JCalendar.onclick (year,month,date)//点击日期时执行的静态函数,可以更改(或者覆盖)为自己需要函数,控件传递过来的参数为当前日期
JCalendar.onupdate (year,month,date){//日历更改时执行的函数,可以更改(或者覆盖)为自己需要函数,控件传递过来的参数为当前日期
***********************************/
//一个例子
JCalendar.onclick = function (year,month,date){
alert("today is:" + year + "-" + month + "-" + date)
}
document.getElementById("calendar_contain").innerHTML = new JCalendar().show()
</script>
</body>
</html>
那样比用输入年龄好一些!