javascript中的正則表達式
現在已經沒有研究正則表達式原理,現在只想在網上找過來看看了,下面的都是來自別人的博客。
1.正則表達式 整數
^[1-9]\d*$ //匹配正整數
^-[1-9]\d*$ //匹配負整數
^-?[1-9]\d*$ //匹配整數
^[1-9]\d*|0$ //匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$ //匹配非正整數(負整數 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮點數
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(負浮點數 + 0)
2.另外一個版本
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點數(負浮點數 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數
"^(-?\d+)(\.\d+)?$" //浮點數
"^[A-Za-z]+$" //由26個英文字母組成的字符串
"^[A-Z]+$" //由26個英文字母的大寫組成的字符串
"^[a-z]+$" //由26個英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字符串
"^\w+$" //由數字、26個英文字母或者下劃線組成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil
"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //電話號碼
"/^(?:(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:1[0-9][0-9]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:2[0-5][0-5])|(?:25[0-5])|(?:1[0-9][0-9])|(?:[1-9][0-9])|(?:[0-9]))$/" //IPv4地址
YYYY-MM-DD基本上把閏年和2月等的情況都考慮進去了
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$
C#正則表達式
圖片 src[^>]*[^/].(?:jpg|bmp|gif)(?:\"|\')
中文 ^([\u4e00-\u9fa5]+|[a-zA-Z0-9]+)$
網址 "\<a.+?href=['""](?!http\:\/\/)(?!mailto\:)(?>foundAnchor>[^'"">]+?)[^>]*?\>"
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配空行的正則表達式:\n[\s| ]*\r
匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正則表達式:(^\s*)|(\s*$)(像vbscript那樣的trim函數)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正則表達式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
---------------------------------------------------------------------------
以下是例子:
利用正則表達式限制網頁表單里的文本框輸入內容:
用正則表達式限制只能輸入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
1.用正則表達式限制只能輸入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
2.用正則表達式限制只能輸入數字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
3.用正則表達式限制只能輸入數字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
4.計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)
String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
5.javascript中沒有像vbscript那樣的trim函數,我們就可以利用這個表達式來實現,如下:
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
利用正則表達式分解和轉換IP地址:
6.下面是利用正則表達式匹配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("不是一個正確的IP地址!")
}
}
不過上面的程序如果不用正則表達式,而直接用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))
3.這位博友很細心把html代碼也貼出來了
<!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-Type" content="text/html; charset=utf-8" />
<title>Test</title>
<script type="text/javascript" language="javascript" src="jquery.js"></script>
<script type="text/javascript" language="javascript" >
function validata(){
if($("#username").val()==""){
document.write("請輸入名字");
return false;
}
if($("#password").val()==""){
document.write("請輸入密碼");
return false;
}
if($("#telephone").val()==""){
document.write("請輸入電話號碼");
}
if($("#email").val()==""){
$("#email").val("shuangping@163.com");
}
}
function isInteger(obj){
reg=/^[-+]?\d+$/;
if(!reg.test(obj)){
$("#test").html("<b>Please input correct figures</b>");
}else{
$("#test").html("");
}
}
function isEmail(obj){
reg=/^\w{3,}@\w+(\.\w+)+$/;
if(!reg.test(obj)){
$("#test").html("<b>請輸入正確的郵箱地址</b>");
}else{
$("#test").html("");
}
}
function isString(obj){
reg=/^[a-z,A-Z]+$/;
if(!reg.test(obj)){
$("#test").html("<b>只能輸入字符</b>");
}else{
$("#test").html("");
}
}
function isTelephone(obj){
reg=/^(\d{3,4}\-)?[1-9]\d{6,7}$/;
if(!reg.test(obj)){
$("#test").html("<b>請輸入正確的電話號碼!</b>");
}else{
$("#test").html("");
}
}
function isMobile(obj){
reg=/^(\+\d{2,3}\-)?\d{11}$/;
if(!reg.test(obj)){
$("#test").html("請輸入正確移動電話");
}else{
$("#test").html("");
}
}
function isUri(obj){
reg=/^http:\/\/[a-zA-Z0-9]+\.[a-zA-Z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/;
if(!reg.test(obj)){
$("#test").html($("#uri").val()+"請輸入正確的inernet地址");
}else{
$("#test").html("");
}
}
//document加載完畢執行
$(document).ready(function() {
// do something here
//隔行換色功能
$("p").each(function(i){
this.style.color=['red','green','blue','black'][i%2]
});
//eq(2)獲取$("p")集合的第3個元素
$("p").eq(2).click(function(){$("#display").css("color","blue")});
//所有test中的p都附加了樣式"over"。
$("#test>p").addClass("over");
//test中的最后一個p附加了樣式"out"。
$("#test p:last").addClass("out");
//選擇同級元素還沒看懂
//$('#faq').find('dd').hide().end().find('dt').click(function()
//選擇父級元素
$("a").hover(
function(){$(this).parents("p").addClass("out")},
function(){$(this).parents("p").removeClass("out")})
//hover鼠標懸停效果,toggle每次點擊時切換要調用的函數 ,
//trigger(eventtype): 在每一個匹配的元素上觸發某類事件,
//bind(eventtype,fn),unbind(eventtype): 事件的綁定與反綁定從每一個匹配的元素中(添加)刪除綁定的事件。
//方法的連寫
$("#display").hover(function(){
$(this).addClass("over");
},function(){
$(this).removeClass("over");
})
.click(function(){alert($("#display").text())});
if($.browser.msie){//判斷瀏覽器,若是ie則執行下面的功能
//聚焦
$("input[@type=text],textarea,input[@type=password]")
.focus(function(){$(this).css({background:"white",border:"1px solid blue"})})
//也可以這樣連著寫,
//.blur(function(){$(this).css({background:"white",border:"1px solid black"})})
//失去焦點
//css樣式可以通過addClass()來添加
$("input[@type=text],textarea,input[@type=password]")
.blur(function(){$(this).css({background:"white",border:"1px solid black"});});
}
});
</script>
<style type="text/css">
.over{
font-size:large;
font-style:italic;
}
.out{
font-size:small;
}
</style>
</head>
<body >
<div id="display">demo</div>
<div id="test">
<p>adfa<a>dfasfa</a>sdfasdf</p>
<p>adfadfasfasdfasdf</p>
<p>adfadfasfasdfasdf</p>
<p>adfadfasfasdfasdf</p>
</div>
<form id="theForm">
isString<div><input type="text" id="username" onblur="isString(this.value)"/></div>
isInteger<div><input type="text" id="password" onblur="isInteger(this.value)"/></div>
isTelephone<div><input type="text" id="telephone" onblur="isTelephone(this.value)"/></div>
isMobile<div><input type="text" id="mobile" onblur="isMobile(this.value)"/></div>
isEmail<div><input type="text" id="email" onblur="isEmail(this.value)"/></div>
isUri<div><input type="text" id="uri" onblur="isUri(this.value)"/></div>
<div><input type="button" value="Validata" onclick="return validata();" /></div>
</form>
</body>
</html>
4. 用JS jquery取float型小數點后兩位
1. 最笨的辦法
function get()
{
var s = 22.127456 + “”;
var str = s.substring(0,s.indexOf(“.”) + 3);
alert(str);
}
2. 正則表達式效果不錯
<scrīpt type=”text/javascrīpt”>
onload = function(){
var a = “23.456322″;
var aNew;
var re = /([0-9]+\.[0-9]{2})[0-9]*/;
aNew = a.replace(re,”$1″);
alert(aNew);
}
</scrīpt>
3. 他就比較聰明了…..
<scrīpt>
var num=22.127456; alert( Math.round(num*100)/100);
</scrīpt>
4.會用新鮮東西的朋友……. 但是需要 IE5.5+才支持。
<scrīpt>
var num=22.127456; alert( num.toFixed(2));
</scrīpt>
參考鏈接:
http://www.rzrgm.cn/freexiaoyu/archive/2008/12/17/1356690.html
http://www.rzrgm.cn/qyz123/archive/2007/05/12/743537.html
http://www.rzrgm.cn/luluping/archive/2008/05/04/1181434.html
關鍵字:js驗證表單大全,用JS控制表單提交 ,javascript提交表單:
目錄:
1:js 字符串長度限制、判斷字符長度 、js限制輸入、限制不能輸入、textarea 長度限制
2.:js判斷漢字、判斷是否漢字 、只能輸入漢字
3:js判斷是否輸入英文、只能輸入英文
4:js只能輸入數字,判斷數字、驗證數字、檢測數字、判斷是否為數字、只能輸入數字
5:只能輸入英文字符和數字
6: js email驗證 、js 判斷email 、信箱/郵箱格式驗證
7:js字符過濾,屏蔽關鍵字
8:js密碼驗證、判斷密碼
2.1: js 不為空、為空或不是對象 、判斷為空 、判斷不為空
2.2:比較兩個表單項的值是否相同
2.3:表單只能為數字和"_",
2.4:表單項輸入數值/長度限定
2.5:中文/英文/數字/郵件地址合法性判斷
2.6:限定表單項不能輸入的字符
2.7表單的自符控制
2.8:form文本域的通用校驗函數
1. 長度限制
<script>
function test()
{
if(document.a.b.value.length>50)
{
alert("不能超過50個字符!");
document.a.b.focus();
return false;
}
}
</script>
<form name=a onsubmit="return test()">
<textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea>
<input type="submit" name="Submit" value="check">
</form>
2. 只能是漢字
<input onkeyup="value="/oblog/value.replace(/[^\u4E00-\u9FA5]/g,'')">
3." 只能是英文
<script language=javascript>
function onlyEng()
{
if(!(event.keyCode>=65&&event.keyCode<=90))
event.returnvalue=false;
}
</script>
<input onkeydown="onlyEng();">
4. 只能是數字
<script language=javascript>
function onlyNum()
{
if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)))
//考慮小鍵盤上的數字鍵
event.returnvalue=false;
}
</script>
<input onkeydown="onlyNum();">
5. 只能是英文字符和數字
<input onkeyup="value="/oblog/value.replace(/[\W]/g,"'')
"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))">
6. 驗證油箱格式
<SCRIPT LANGUAGE=javascript RUNAT=Server>
function isEmail(strEmail) {
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("oh");
}
</SCRIPT>
<input type=text onblur=isEmail(this.value)>
7. 屏蔽關鍵字(這里屏蔽***和****)
<script language="javascript1.2">
function test() {
if((a.b.value.indexOf ("***") == 0)||(a.b.value.indexOf ("****") == 0)){
alert(":)");
a.b.focus();
return false;}
}
</script>
<form name=a onsubmit="return test()">
<input type=text name=b>
<input type="submit" name="Submit" value="check">
</form>
8. 兩次輸入密碼是否相同
<FORM METHOD=POST ACTION="">
<input type="password" id="input1">
<input type="password" id="input2">
<input type="button" value="test" onclick="check()">
</FORM>
<script>
function check()
{
with(document.all){
if(input1.value!=input2.value)
{
alert("false")
input1.value = "";
input2.value = "";
}
else document.forms[0].submit();
}
}
</script>
夠了吧 :)
屏蔽右鍵 很酷
oncontextmenu="return false" ondragstart="return false" onselectstart="return false"
加在body中
二
2.1 表單項不能為空
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.name.value.length == 0) {
alert("請輸入您姓名!");
document.form.name.focus();
return false;
}
return true;
}
-->
</script>
2.2 比較兩個表單項的值是否相同
<script language="javascript">
<!--
function CheckForm()
if (document.form.PWD.value != document.form.PWD_Again.value) {
alert("您兩次輸入的密碼不一樣!請重新輸入.");
document.ADDUser.PWD.focus();
return false;
}
return true;
}
-->
</script>
2.3 表單項只能為數字和"_",用于電話/銀行帳號驗證上,可擴展到域名注冊等
<script language="javascript">
<!--
function isNumber(String)
{
var Letters = "1234567890-"; //可以自己增加可輸入值
var i;
var c;
if(String.charAt( 0 )=='-')
return false;
if( String.charAt( String.length - 1 ) == '-' )
return false;
for( i = 0; i < String.length; i ++ )
{
c = String.charAt( i );
if (Letters.indexOf( c ) < 0)
return false;
}
return true;
}
function CheckForm()
{
if(! isNumber(document.form.TEL.value)) {
alert("您的電話號碼不合法!");
document.form.TEL.focus();
return false;
}
return true;
}
-->
</script>
2.4 表單項輸入數值/長度限定
<script language="javascript">
<!--
function CheckForm()
{
if (document.form.count.value > 100 || document.form.count.value < 1)
{
alert("輸入數值不能小于零大于100!");
document.form.count.focus();
return false;
}
if (document.form.MESSAGE.value.length<10)
{
alert("輸入文字小于10!");
document.form.MESSAGE.focus();
return false;
}
return true;
}
//-->
</script>
2.5 中文/英文/數字/郵件地址合法性判斷
<SCRIPT LANGUAGE="javascript">
<!--
function isEnglish(name) //英文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return false;
}
return true;
}
function isChinese(name) //中文值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charCodeAt(i) > 128)
return true;
}
return false;
}
function isMail(name) // E-mail值檢測
{
if(! isEnglish(name))
return false;
i = name.indexOf(" at ");
j = name dot lastIndexOf(" at ");
if(i == -1)
return false;
if(i != j)
return false;
if(i == name dot length)
return false;
return true;
}
function isNumber(name) //數值檢測
{
if(name.length == 0)
return false;
for(i = 0; i < name.length; i++) {
if(name.charAt(i) < "0" || name.charAt(i) > "9")
return false;
}
return true;
}
function CheckForm()
{
if(! isMail(form.Email.value)) {
alert("您的電子郵件不合法!");
form.Email.focus();
return false;
}
if(! isEnglish(form.name.value)) {
alert("英文名不合法!");
form.name.focus();
return false;
}
if(! isChinese(form.cnname.value)) {
alert("中文名不合法!");
form.cnname.focus();
return false;
}
if(! isNumber(form.PublicZipCode.value)) {
alert("郵政編碼不合法!");
form.PublicZipCode.focus();
return false;
}
return true;
}
//-->
</SCRIPT>
2.6 限定表單項不能輸入的字符
<script language="javascript">
<!--
function contain(str,charset)// 字符串包含測試函數
{
var i;
for(i=0;i<charset.length;i++)
if(str.indexOf(charset.charAt(i))>=0)
return true;
return false;
}
function CheckForm()
{
if ((contain(document.form.NAME.value, "%\(\)><")) || (contain(document.form.MESSAGE.value, "%\(\)><")))
{
alert("輸入了非法字符");
document.form.NAME.focus();
return false;
}
return true;
}
//-->
</script>
1. 檢查一段字符串是否全由數字組成
---------------------------------------
<script language="Javascript"><!--
function checkNum(str){return str.match(/\D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>
2. 怎么判斷是否是字符
---------------------------------------
if (/[^\x00-\xff]/g.test(s)) alert("含有漢字");
else alert("全是字符");
4. 郵箱格式驗證
---------------------------------------
//函數名:chkemail
//功能介紹:檢查是否為Email Address
//參數說明:要檢查的字符串
//返回值:0:不是 1:是
function chkemail(a)
{ var i=a.length;
var temp = a.indexOf('@');
var tempd = a.indexOf('.');
if (temp > 1) {
if ((i-temp) > 3){
if ((i-tempd)>0){
return 1;
}
}
}
return 0;
}
5. 數字格式驗證
---------------------------------------
//函數名:fucCheckNUM
//功能介紹:檢查是否為數字
//參數說明:要檢查的數字
//返回值:1為是數字,0為不是數字
function fucCheckNUM(NUM)
{
var i,j,strTemp;
strTemp="0123456789";
if ( NUM.length== 0)
return 0
for (i=0;i<NUM.length;i++)
{
j=strTemp.indexOf(NUM.charAt(i));
if (j==-1)
{
//說明有字符不是數字
return 0;
}
}
//說明是數字
return 1;
}
6. 電話號碼格式驗證
---------------------------------------
//函數名:fucCheckTEL
//功能介紹:檢查是否為電話號碼
//參數說明:要檢查的字符串
//返回值:1為是合法,0為不合法
function fucCheckTEL(TEL)
{
var i,j,strTemp;
strTemp="0123456789-()# ";
for (i=0;i<TEL.length;i++)
{
j=strTemp.indexOf(TEL.charAt(i));
if (j==-1)
{
//說明有字符不合法
return 0;
}
}
//說明合法
return 1;
}
7. 判斷輸入是否為中文的函數
---------------------------------------
function ischinese(s){
var ret=true;
for(var i=0;i<s.length;i++)
ret=ret && (s.charCodeAt(i)>=10000);
return ret;
}
8. 綜合的判斷用戶輸入的合法性的函數
---------------------------------------
<script language="javascript">
//限制輸入字符的位數開始
//m是用戶輸入,n是要限制的位數
function issmall(m,n)
{
if ((m<n) && (m>0))
{
return(false);
}
else
{return(true);}
}
9. 判斷密碼是否輸入一致
---------------------------------------
function issame(str1,str2)
{
if (str1==str2)
{return(true);}
else
{return(false);}
}
10. 判斷用戶名是否為數字字母下滑線
---------------------------------------
function notchinese(str){
var reg=/[^A-Za-z0-9_]/g
if (reg.test(str)){
return (false);
}else{
return(true); }
}
11.驗證手機號
function validatemobile(mobile)
{
if(mobile.length==0)
{
alert('請輸入手機號碼!');
document.form1.mobile.focus();
return false;
}
if(mobile.length!=11)
{
alert('請輸入有效的手機號碼!');
document.form1.mobile.focus();
return false;
}
var myreg = /^(((13[0-9]{1})|159|153)+\d{8})$/;
if(!myreg.test(mobile))
{
alert('請輸入有效的手機號碼!');
document.form1.mobile.focus();
return false;
}
}
或者
if(!/^(13[0-9]|14[0-9]|15[0-9]|18[0-9])\d{8}$/i.test(mobile))
或者
代碼如下:
function Checkreg()
{
//驗證電話號碼手機號碼,包含153,159號段
if (document.form.phone.value=="" && document.form.UserMobile.value==""){
alert("電話號碼和手機號碼至少選填一個阿!");
document.form.phone.focus();
return false;
}
if (document.form.phone.value != ""){
var phone=document.form.phone.value;
var p1 = /^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
var me = false;
if (p1.test(phone))me=true;
if (!me){
document.form.phone.value='';
alert('對不起,您輸入的電話號碼有錯誤。區號和電話號碼之間請用-分割');
document.form.phone.focus();
return false;
}
}
if (document.form.UserMobile.value != ""){
var mobile=document.form.UserMobile.value;
var reg0 = /^13\d{5,9}$/;
var reg1 = /^153\d{4,8}$/;
var reg2 = /^159\d{4,8}$/;
var reg3 = /^0\d{10,11}$/;
var my = false;
if (reg0.test(mobile))my=true;
if (reg1.test(mobile))my=true;
if (reg2.test(mobile))my=true;
if (reg3.test(mobile))my=true;
if (!my){
document.form.UserMobile.value='';
alert('對不起,您輸入的手機或小靈通號碼有錯誤。');
document.form.UserMobile.focus();
return false;
}
return true;
}
}
說明
test方法檢查在字符串中是否存在一個模式,如果存在則返回 true,否則就返回 false。
正則表達式部分:
\d 代表一個數字
{7,8} 代表7-8位數字(表示電話號碼)
{3,} 代表分機號碼
d{2,3} 代表區號
\+]\d{2,3} 代表國際區號
^13\d{5,9}$/ //130?139。至少5位,最多9位
/^153\d{4,8}$/ //聯通153。至少4位,最多8位
/^159\d{4,8}$/ //移動159。至少4位,最多8位
第二個:
復制代碼 代碼如下:
var Mobile = $("#varMobilePhone").val();
var Phone = $("#varPhoneNo").val();
if (Mobile == ""&&Phone == "")
{
alert("手機和固話,請至少填寫一項聯系方式!");
$("#varMobilePhone").focus();
return;
}
if(Mobile!="")
{
if(!isMobil(Mobile))
{
alert("請輸入正確的手機號碼!");
$("#varMobilePhone").focus();
return; }
}
//手機號碼驗證信息
function isMobil(s)
{
var patrn = /(^0{0,1}1[3|4|5|6|7|8|9][0-9]{9}$)/;
if (!patrn.exec(s))
{
return false;
} return true; }
后臺驗證如下:
if (model.Zip != null)
{
if (!Common.PageValidate.IsValidate(model.Zip,"^\\d{6}$"))
{ Common.WebMessage.showMsg(HttpContext.Current, "請輸入正確郵編");
return;
}
}
if (model.PhoneNo != null)
{
if (!Common.PageValidate.IsValidate(model.PhoneNo, "\\d{3}-\\d{8}|\\d{4}-\\d{7}"))
{
Common.WebMessage.showMsg(HttpContext.Current, "請輸入正確的電話號碼!");
return;
}
}
if (model.MobilePhone != null)
{
if (!Common.PageValidate.IsValidate(model.MobilePhone, "^0{0,1}(13[0-9]|15[3-9]|15[0-2]|18[0-9])[0-9]{8}$"))
{
Common.WebMessage.showMsg(HttpContext.Current, "請輸入正確11位有效的手機號碼!");
return;
}
}
match 方法
使用正則表達式模式對字符串執行查找,并將包含查找的結果作為數組返回。
stringObj.match(rgExp)
參數
stringObj
必選項。對其進行查找的 String 對象或字符串文字。
rgExp
必選項。為包含正則表達式模式和可用標志的正則表達式對象。也可以是包含正則表達式模式和可用標志的變量名或字符串文字。
其余說明與exec一樣,不同的是如果match的表達式匹配了全局標記g將出現所有匹配項,而不用循環,但所有匹配中不會包含子匹配項。
例子1:
function
MatchDemo(){ var r, re; // 聲明變量。 var s = "The rain in Spain falls
mainly in the plain"; re = /(a)in/ig; // 創建正則表達式模式。 r = s.match(re); //
嘗試去匹配搜索字符串。 document.write(r); // 返回的數組包含了所有 "ain"
出現的四個匹配,r[0]、r[1]、r[2]、r[3]。 // 但沒有子匹配項a。}輸出結果:ain,ain,ain,ain
exec 方法
用正則表達式模式在字符串中查找,并返回該查找結果的第一個值(數組),如果匹配失敗,返回null。
rgExp.exec(str)
參數
rgExp
必選項。包含正則表達式模式和可用標志的正則表達式對象。
str
必選項。要在其中執行查找的 String 對象或字符串文字。
返回數組包含:
input:整個被查找的字符串的值;
index:匹配結果所在的位置(位);
lastInput:下一次匹配結果的位置;
arr:結果值,arr[0]全匹配結果,arr[1,2...]為表達式內()的子匹配,由左至右為1,2...。
例子2:
代碼如下:
function RegExpTest(){
var re = /\w+/g; // 注意g將全文匹配,不加將永遠只返回第一個匹配。
var arr;
while((arr = re.exec(src)) !=null){ //exec使arr返回匹配的第一個,while循環一次將使re在g作用尋找下一個匹配。
document.write(arr.index + "-" + arr.lastIndex + ":" + arr + "<br/>");
for(key in arr){
document.write(key + "=>" + arr[key] + "<br/>");
}
document.write("<br/>");
}
}
window.onload = RegExpTest();
輸出結果:
0-1:I //0為index,i所在位置,1為下一個匹配所在位置
input=>I love you!
index=>0
lastIndex=>1
0=>I
2-6:love
input=>I love you!
index=>2
lastIndex=>6
0=>love
7-10:you
input=>I love you!
index=>7
lastIndex=>10
0=>you
說
明:根據手冊,exec只返回匹配結果的第一個值,比如上例如果不用while循環,將只返回'I'(盡管i空格后的love和you都符合表達式),無
論re表達式用不用全局標記g。但是如果為正則表達式設置了全局標記g,exec 從以 lastIndex
的值指示的位置開始查找。如果沒有設置全局標志,exec 忽略 lastIndex
的值,從字符串的起始位置開始搜索。利用這個特點可以反復調用exec遍歷所有匹配,等價于match具有g標志。
當然,如果正則表達式忘記用g,而又用循環(比如:while、for等),exec將每次都循環第一個,造成死循環。
exec的輸出將包含子匹配項。
例子3:
function execDemo(){
var r, re; // 聲明變量。
var s = "The rain in Spain falls mainly in the plain";
re = /[\w]*(ai)n/ig;
r = re.exec(s);
document.write(r + "<br/>");
for(key in r){
document.write(key + "-" + r[key] + "<br/>");
}
}
window.onload = execDemo();
輸出:
rain,ai
input-The rain in Spain falls mainly in the plain
index-4
lastIndex-8
0-rain
1-ai
test 方法
返回一個 Boolean 值,它指出在被查找的字符串中是否匹配給出的正則表達式。
rgexp.test(str)
參數
rgexp
必選項。包含正則表達式模式或可用標志的正則表達式對象。
str
必選項。要在其上測試查找的字符串。
說明
test 方法檢查字符串是否與給出的正則表達式模式相匹配,如果是則返回 true,否則就返回 false。
例子4:
function TestDemo(re, s){
var s1;
if (re.test(s))
s1 = " 匹配正則式 ";
else
s1 = " 不匹配正則式 ";
return("'" + s + "'" + s1 + "'"+ re.source + "'");
}
window.onload = document.write(TestDemo(/ab/,'cdef'));
輸出結果:'cdef' 不匹配正則式 'ab'
注意:test()繼承正則表達式的lastIndex屬性,表達式在匹配全局標志g的時候須注意。
例子5:
function testDemo(){
var r, re; // 聲明變量。
var s = "I";
re = /I/ig; // 創建正則表達式模式。
document.write(re.test(s) + "<br/>"); // 返回 Boolean 結果。
document.write(re.test(s) + "<br/>");
document.write(re.test(s));
}
testDemo();
輸出結果:
true
false
true
當第二次調用test()的時候,lastIndex指向下一次匹配所在位置1,所以第二次匹配不成功,lastIndex重新指向0,等于第三次又重新匹配。下例顯示test的lastIndex屬性:
例子6:
function testDemo(){
var r, re; // 聲明變量。
var s = "I";
re = /I/ig; // 創建正則表達式模式。
document.write(re.test(s) + "<br/>"); // 返回 Boolean 結果。
document.write(re.lastIndex); // 返回 Boolean 結果。
}
testDemo();
輸出:
true
1
解決方法:將test()的lastIndex屬性每次重新指向0,re.lastIndex = 0;
search 方法
返回與正則表達式查找內容匹配的第一個子字符串的位置(偏移位)。
stringObj.search(rgExp)
參數
stringObj
必選項。要在其上進行查找的 String 對象或字符串文字。
rgExp
必選項。包含正則表達式模式和可用標志的正則表達式對象。
說明:如果找到則返回子字符至開始處的偏移位,否則返回-1。
例子6:
function SearchDemo(){
var r, re; // 聲明變量。
var s = "The rain in Spain falls mainly in the plain.";
re = /falls/i; // 創建正則表達式模式。
re2 = /tom/i;
r = s.search(re); // 查找字符串。
r2 = s.search(re2);
return("r:" + r + ";r2:" + r2); // 返回 Boolean 結果。
}
document.write(SearchDemo());
輸出:r:18;r2:-1
replace 方法
返回根據正則表達式進行文字替換后的字符串的復制。
stringObj.replace(rgExp, replaceText)
參數
stringObj
必選項。要執行該替換的 String 對象或字符串文字。該字符串不會被 replace 方法修改。
rgExp
必選項。為包含正則表達式模式或可用標志的正則表達式對象。也可以是 String 對象或文字。如果 rgExp 不是正則表達式對象,它將被轉換為字符串,并進行精確的查找;不要嘗試將字符串轉化為正則表達式。
replaceText
必選項。是一個String 對象或字符串文字,對于stringObj 中每個匹配 rgExp 中的位置都用該對象所包含的文字加以替換。在 Jscript 5.5 或更新版本中,replaceText 參數也可以是返回替換文本的函數。
說明
replace 方法的結果是一個完成了指定替換的 stringObj 對象的復制。意思為匹配的項進行指定替換,其它不變作為StringObj的原樣返回。
ECMAScript
v3 規定,replace() 方法的參數 replacement
可以是函數而不是字符串。在這種情況下,每個匹配都調用該函數,它返回的字符串將作為替換文本使用。該函數的第一個參數是匹配模式的字符串。接下來的參數
是與模式中的子表達式匹配的字符串,可以有 0 個或多個這樣的參數。接下來的參數是一個整數,聲明了匹配在 stringObject
中出現的位置。最后一個參數是 stringObject
本身。結果為將每一匹配的子字符串替換為函數調用的相應返回值的字符串值。函數作參可以進行更為復雜的操作。
例子7:
function f2c(s) {
var test = /(\d+(\.\d*)?)F\b/g; // 說明華氏溫度可能模式有:123F或123.4F。注意,這里用了g模式
return(s.replace
(test,
function(Regstr,$1,$2,$3,newstrObj) {
return(("<br/>" + Regstr +"<br/>" + ($1-32) * 1/2) + "C" +"<br/>" + //以下兩行進行替換
$2 +"<br/>" + $3 +"<br/>" + newstrObj +"<br/>" );
}
)
);
}
document.write(f2c("Water: 32.2F and Oil: 20.30F."));
輸出結果:
Water: //不與正則匹配的字符,按原字符輸出
32.2F //與正則相匹配的第一個字符串的原字符串 Regstr
0.10000000000000142C //與正則相匹配的第一個字符串的第一個子模式匹配的替換結果 $1
.2 //與正則相匹配的第一個字符串的第二個子模式匹配項的替換結果,這里我們沒有將它替換 $2
7 //與正則相匹配的第一個字符串的第一個子匹配出現的偏移量 $3
Water: 32.2F and Oil: 20.30F. //原字符串 newstrObj
and Oil: //不與正則匹配的字符
20.30F //與正則相匹配的第二個字符串的原字符串
-5.85C //與正則相匹配的第二個字符串的第一個子模式與匹配的替換結果
.30 //與正則相匹配的第二個字符串的第二個子模式匹配項的替換結果,這里我們沒有將它替換
22 //與正則相匹配的第二個字符串的第一個子匹配出現的偏移量
Water: 32.2F and Oil: 20.30F. //原字符串
. //不與正則匹配的字符
上面的函數參數我們全部用到了。在實際中,我們只須用將xxF替換為xxC,根據要求,我們無須寫這么多參數。
例子8:
function f2c(s) {
var test = /(\d+(\.\d*)?)F\b/g; // 說明華氏溫度可能模式有:123F或123.4F
return(s.replace
(test,
function(strObj,$1) {
return((($1-32) * 1/2) + "C");
}
)
);
}
document.write(f2c("Water: 32.2F and Oil: 20.30F."));
輸出:Water: 0.10000000000000142C and Oil: -5.85C.
更多的應用:
例子9:
function f2c(s) {
var test = /([\d]{4})-([\d]{1,2})-([\d]{1,2})/;
return(s.replace
(test,
function($0,$1,$2,$3) {
return($2 +"/" + $1);
}
)
);
}
document.write(f2c("today: 2011-03-29"));
輸出:today: 03/2011
split 方法
將一個字符串分割為子字符串,然后將結果作為字符串數組返回。
stringObj.split([separator[, limit]])
參數
stringObj
必選項。要被分解的 String 對象或文字。該對象不會被 split 方法修改。
separator
可選項。字符串或 正則表達式 對象,它標識了分隔字符串時使用的是一個還是多個字符。如果忽略該選項,返回包含整個字符串的單一元素數組。
limit
可選項。該值用來限制返回數組中的元素個數。
說明
split 方法的結果是一個字符串數組,在 stingObj 中每個出現 separator 的位置都要進行分解。separator 不作為任何數組元素的部分返回。
例子10:
function SplitDemo(){
var s, ss;
var s = "The rain in Spain falls mainly in the plain.";
// 正則表達式,用不分大不寫的s進行分隔。
ss = s.split(/s/i);
return(ss);
}
document.write(SplitDemo());
輸出:The rain in ,pain fall, mainly in the plain.
js正則表達式之exec()方法、match()方法以及search()方法
先看代碼:
var sToMatch = "test, Tes, tst, tset, Test, Tesyt, sTes";
var reEs = /es/gi;
alert(reEs.exec(sToMatch));
alert(sToMatch.match(reEs));
alert(sToMatch.search(reEs));
三個彈出框內容如下:



結果分析如下:
1、RegExp的exec()方法,有一個字符串參數,返回一個數組,數組的第一個條目是第一個匹配;其他的是反向引用。所以第一個返回的結果是第一個匹配的值es(不區分大小寫)。
2、String對象有一個match()方法,它返回一個包含在字符串中所有匹配的數據。這個方法調用string對象,同時傳給它一個RegExp對象。所以第二個彈出語句返回的是所有符合正則表達式的數組。
3、search()的字符串方法與indexOf()有些類似,但是它使用一個RegExp對象而非僅僅一個子字符串。search()方法返回 第一個匹配值的位置。所以第三處彈出的是“1”,即第二個字符就匹配了。注意的是search()方法不支持全局匹配正規表達式(帶參數g)。
var tel = /(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)|(13\d{9}$)|(15[0135-9]\d{8}$)|(18[267]\d{8}$)/;
var phone = document.getElementById("phoneNumber").value;
if(phone != "" && phone.replace(/\s/g,"")!="" && !(tel.exec(phone))) {
alert("電話號碼格式不對,正確格式如下:\n座機號碼:區號-座機號碼(或)\n手機號碼:11位手機號碼");
return false;
}
var temp = document.getElementById("email").value;
var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
if(temp.value!=""){
if(!myreg.test(temp) && temp !="" && temp.replace(/\s/g,"")!=""){
alert("email格式不正確,請重新輸入!");
//email.focus();
return false;
}
}
驗證銀行卡號
//銀行卡號校驗 //Description: 銀行卡號Luhm校驗 //Luhm校驗規則:16位銀行卡號(19位通用): // 1.將未帶校驗位的 15(或18)位卡號從右依次編號 1 到 15(18),位于奇數位號上的數字乘以 2。 // 2.將奇位乘積的個十位全部相加,再加上所有偶數位上的數字。 // 3.將加法和加上校驗位能被 10 整除。 function luhmCheck(bankno){ if (bankno.length < 16 || bankno.length > 19) { //$("#banknoInfo").html("銀行卡號長度必須在16到19之間"); return false; } var num = /^\d*$/; //全數字 if (!num.exec(bankno)) { //$("#banknoInfo").html("銀行卡號必須全為數字"); return false; } //開頭6位 var strBin="10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99"; if (strBin.indexOf(bankno.substring(0, 2))== -1) { //$("#banknoInfo").html("銀行卡號開頭6位不符合規范"); return false; } var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(與luhm進行比較) var first15Num=bankno.substr(0,bankno.length-1);//前15或18位 var newArr=new Array(); for(var i=first15Num.length-1;i>-1;i--){ //前15或18位倒序存進數組 newArr.push(first15Num.substr(i,1)); } var arrJiShu=new Array(); //奇數位*2的積 <9 var arrJiShu2=new Array(); //奇數位*2的積 >9 var arrOuShu=new Array(); //偶數位數組 for(var j=0;j<newArr.length;j++){ if((j+1)%2==1){//奇數位 if(parseInt(newArr[j])*2<9) arrJiShu.push(parseInt(newArr[j])*2); else arrJiShu2.push(parseInt(newArr[j])*2); } else //偶數位 arrOuShu.push(newArr[j]); } var jishu_child1=new Array();//奇數位*2 >9 的分割之后的數組個位數 var jishu_child2=new Array();//奇數位*2 >9 的分割之后的數組十位數 for(var h=0;h<arrJiShu2.length;h++){ jishu_child1.push(parseInt(arrJiShu2[h])%10); jishu_child2.push(parseInt(arrJiShu2[h])/10); } var sumJiShu=0; //奇數位*2 < 9 的數組之和 var sumOuShu=0; //偶數位數組之和 var sumJiShuChild1=0; //奇數位*2 >9 的分割之后的數組個位數之和 var sumJiShuChild2=0; //奇數位*2 >9 的分割之后的數組十位數之和 var sumTotal=0; for(var m=0;m<arrJiShu.length;m++){ sumJiShu=sumJiShu+parseInt(arrJiShu[m]); } for(var n=0;n<arrOuShu.length;n++){ sumOuShu=sumOuShu+parseInt(arrOuShu[n]); } for(var p=0;p<jishu_child1.length;p++){ sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]); sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]); } //計算總和 sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2); //計算Luhm值 var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10; var luhm= 10-k; if(lastNum==luhm){ $("#banknoInfo").html("Luhm驗證通過"); return true; } else{ $("#banknoInfo").html("銀行卡號必須符合Luhm校驗"); return false; } } 郵箱驗證 var reg_email=/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/;
驗證手機號
/* 根據〖中華人民共和國國家標準 GB 11643-1999〗中有關公民身份號碼的規定,公民身份號碼是特征組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。 地址碼表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼。 出生日期碼表示編碼對象出生的年、月、日,其中年份用四位數字表示,年、月、日之間不用分隔符。 順序碼表示同一地址碼所標識的區域范圍內,對同年、月、日出生的人員編定的順序號。順序碼的奇數分給男性,偶數分給女性。 校驗碼是根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。 出生日期計算方法。 15位的身份證編碼首先把出生年擴展為4位,簡單的就是增加一個19或18,這樣就包含了所有1800-1999年出生的人; 2000年后出生的肯定都是18位的了沒有這個煩惱,至于1800年前出生的,那啥那時應該還沒身份證號這個東東,⊙﹏⊙b汗... 下面是正則表達式: 出生日期1800-2099 (18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01]) 身份證正則表達式 /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i 15位校驗規則 6位地址編碼+6位出生日期+3位順序號 18位校驗規則 6位地址編碼+8位出生日期+3位順序號+1位校驗位 校驗位規則 公式:∑(ai×Wi)(mod 11)……………………………………(1) 公式(1)中: i----表示號碼字符從由至左包括校驗碼在內的位置序號; ai----表示第i位置上的號碼字符值; Wi----示第i位置上的加權因子,其數值依據公式Wi=2^(n-1)(mod 11)計算得出。 i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1 */ //身份證號合法性驗證 //支持15位和18位身份證號 //支持地址編碼、出生日期、校驗位驗證 function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江 ",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北 ",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"云南",54:"西藏 ",61:"陜西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外 "}; var tip = ""; var pass= true; if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){ tip = "身份證號格式錯誤"; pass = false; } else if(!city[code.substr(0,2)]){ tip = "地址編碼錯誤"; pass = false; } else{ //18位身份證需要驗證最后一位校驗位 if(code.length == 18){ code = code.split(''); //∑(ai×Wi)(mod 11) //加權因子 var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]; //校驗位 var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ]; var sum = 0; var ai = 0; var wi = 0; for (var i = 0; i < 17; i++) { ai = code[i]; wi = factor[i]; sum += ai * wi; } var last = parity[sum % 11]; if(parity[sum % 11] != code[17]){ tip = "校驗位錯誤"; pass =false; } } } if(!pass) alert(tip); return pass; } var c = '130981199312253466'; var res= IdentityCodeValid(c);
// 匹配手機號首尾,以類似“123****8901”的形式輸出 '12345678901'.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
此段正則匹配字符串中的連續11位數字,替換中間4位為*號,輸出常見的隱匿手機號的格式。如果要僅得到末尾4位,則可以改成如下形式:
// 匹配連續11位數字,并替換其中的前7位為*號 '15110280327'.replace(/\d{7}(\d{4})/, '*******$1');
補充注釋:正則表達式中的括號即可用于分組,同時也用于定義子模式串,在replace()方法中,參數二中可以使用$n(n為數字)來依次引用模式串中用括號定義的字串。
$("#name").html(user.name.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')); 隱藏手機號中間4位
作者:Tyler Ning
出處:http://www.rzrgm.cn/tylerdonet/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,請微信聯系冬天里的一把火
浙公網安備 33010602011771號