各种正则吧
1、首先是js和jquery的验证,我就不分开了,直接写在一起得了(其实我也只是分不开,分不清楚罢了,哈哈)
//这个是表单的验证啦,哎,就是麻烦,这种东西还要自己写来写去的,问题是,真的很绕。
<script>
$("#pw").blur(function(){
var pw = $("input[name='pw']").val();
if(pw != '' && 5 > pw.length){
$("#pw").css('border-color','red');
$("#pw_one").html("* 密码至少大于等于6位").css('color','red');
return false;
}else{
$("#pw").css('border-color','');
$("#pw_one").html("* ").css('color','');
}
})
//用户名:
if(!checkUser(un.Trim())){
$("#un").css('border-color','red');
$("#un_one").html("* 不可用,请以字母、数字、下划线组成,字母开头,4-16位。").css('color','red');
return false;
}
function checkUser(str){
var re = /^[a-zA-z]\w{3,15}$/;
return re.test(str);
}
String.prototype.Trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
</script>
1.1 我要分开写,我看得清楚些
//比较时间
<script>
var startTime = $("input[name='startTime']").val(),endTime = $("input[name='endTime']").val();
/*比较时间*/
var timestamp1 = new Date(startTime),timestamp2 = new Date(endTime);
var d = timestamp1.getTime() - timestamp2.getTime();
if(d >= 0){
$("#startTime_one").html(" * 结束时间不能大于或等于开始时间,请认真填写").css('color','red');
}
</script>
<script>
function clearNoNum(obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除“数字”和“.”以外的字符
obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字而不是.
obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个. 清除多余的.
obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
}
</script>
2、下面的这些js验证可以写在公共的js文件里面,方便多个调用
String.prototype.trim=function(){
return this.replace(/(^\s*)|(\s*$)/g, "");
}
/**简易手机号码验证***/
function funRegMobile(mobile){
return (/^(1)\d{10}$/i.test(mobile))? true:false;
}
/**中文验证***/
function funRegChinese(uname){
return (/^[\u4E00-\u9FA5]+$/.test(uname))? true:false;
}
/**邮编***/
function funRegZipCode(num){
return (/^\d{6}$/i.test(num))? true:false;
}
/***特殊字符***/
function funIllegalChar(str){
return (/[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im.test(str))? true:false;
}
/***数字***/
function funRegNnm(num){
return (/^[0-9]*[1-9][0-9]*$/i.test(num))? true:false;
}
/***非负数****/
function funRegFloat(num){
return (/^\d+(\.{0,1}\d+){0,1}$/i.test(num))? true:false;
}
暂时好像找不到了,下次有再补上好了。下面是controller,也就是php的验证方法了,这些也可以写在公共的地方,然后调用
// 把字符串转成数组,支持汉字,只能是utf-8格式的
function StringToArray($str) {
$result = array ();
$len = strlen ( $str );
$i = 0;
while ( $i < $len ) {
$chr = ord ( $str [$i] );
if ($chr == 9 || $chr == 10 || (32 <= $chr && $chr <= 126)) {
$result [] = substr ( $str, $i, 1 );
$i += 1;
} elseif (192 <= $chr && $chr <= 223) {
$result [] = substr ( $str, $i, 2 );
$i += 2;
} elseif (224 <= $chr && $chr <= 239) {
$result [] = substr ( $str, $i, 3 );
$i += 3;
} elseif (240 <= $chr && $chr <= 247) {
$result [] = substr ( $str, $i, 4 );
$i += 4;
} elseif (248 <= $chr && $chr <= 251) {
$result [] = substr ( $str, $i, 5 );
$i += 5;
} elseif (252 <= $chr && $chr <= 253) {
$result [] = substr ( $str, $i, 6 );
$i += 6;
}
}
return $result;
}
// weiphp专用分割函数,同时支持常见的按空格、逗号、分号、换行进行分割
function wp_explode($string, $delimiter = "\s,;\r\n") {
if (empty ( $string ))
return array ();
// 转换中文符号
$string = iconv ( 'utf-8', 'gbk', $string );
$string = preg_replace ( '/\xa3([\xa1-\xfe])/e', 'chr(ord(\1)-0x80)', $string );
$string = iconv ( 'gbk', 'utf-8', $string );
$arr = preg_split ( '/[' . $delimiter . ']+/', $string );
return array_unique ( array_filter ( $arr ) );
}
重起一个代码块,免得太多看着头晕
// 阿拉伯数字转中文表述,如101转成一百零一
function num2cn($number) {
$number = intval ( $number );
$capnum = array (
"零",
"一",
"二",
"三",
"四",
"五",
"六",
"七",
"八",
"九"
);
$capdigit = array (
"",
"十",
"百",
"千",
"万"
);
$data_arr = str_split ( $number );
$count = count ( $data_arr );
for($i = 0; $i < $count; $i ++) {
$d = $capnum [$data_arr [$i]];
$arr [] = $d != '零' ? $d . $capdigit [$count - $i - 1] : $d;
}
$cncap = implode ( "", $arr );
$cncap = preg_replace ( "/(零)+/", "0", $cncap ); // 合并连续“零”
$cncap = trim ( $cncap, '0' );
$cncap = str_replace ( "0", "零", $cncap ); // 合并连续“零”
$cncap == '一十' && $cncap = '十';
$cncap == '' && $cncap = '零';
// echo ( $data.' : '.$cncap.' <br/>' );
return $cncap;
}
function week_name($number = null) {
if ($number === null)
$number = date ( 'w' );
$arr = array (
"日",
"一",
"二",
"三",
"四",
"五",
"六"
);
return '星期' . $arr [$number];
}
// 获取随机的字符串,用于token,EncodingAESKey等的生成
function get_rand_char($length = 6) {
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
$strLength = 61;
for($i = 0; $i < $length; $i ++) {
$res .= $str [rand ( 0, $strLength )];
}
return $res;
}
这个还是比较经典的,相信下个公司开发的时候还是会用到,这是计算两点之间的经纬度距离,其实我之前也写过的,不过我不知道是哪个项目了。
/**
* 根据两点间的经纬度计算距离
*
* @param float $lat
* 纬度值
* @param float $lng
* 经度值
*/
function getDistance($lat1, $lng1, $lat2, $lng2) {
$earthRadius = 6367000; // approximate radius of earth in meters
//$earthRadius = 6370.856;
// Convert these degrees to radians to work with the formula
$lat1 = ($lat1 * pi()) / 180;
$lng1 = ($lng1 * pi()) / 180;
$lat2 = ($lat2 * pi()) / 180;
$lng2 = ($lng2 * pi()) / 180;
// Using the Haversine formula http://en.wikipedia.org/wiki/Haversine_formula calculate the distance
$calcLongitude = $lng2 - $lng1;
$calcLatitude = $lat2 - $lat1;
$stepOne = pow( sin( $calcLatitude / 2 ), 2 ) + cos($lat1) * cos($lat2) * pow ( sin( $calcLongitude / 2), 2 );
$stepTwo = 2 * asin( min( 1, sqrt ( $stepOne ) ) );
$calculatedDistance = $earthRadius * $stepTwo;
return round ( $calculatedDistance );
}
下面就是一些普通的验证了
/**手机号码正则**/
function funRegMobile($tel){
/*return (preg_match("/^1[34578]\d{9}$/",$tel))? true:false;*/
return (preg_match("/^1\d{10}$/",$tel))? true:false;
}
/**固定号码正则**/
function funcRegPhone($tel){
return (preg_match("/^0\d{9,11}$/",$tel)) ? true : false;
}
/**中文正则**/
function funRegChinese($key){
return (preg_match("/^[\x7f-\xff]+$/",$key)) ? true:false;
}
有些人真的是疯狂的刷我们这种小网站的页面,我的妈呀,不得不防啊。
/**
*操作时间控制
*$newTime 当前操作时间
*$contTime 时间间隔
*$backUrl 错误返回页面
**/
function chkTimeDoAction($newTime,$contTime,$backUrl,$sessionName='wcDoActionTime') {
!session($sessionName) || $contTime < $newTime - session($sessionName) ? $return = true : $return = false;
!$return && $backUrl && showTips($backUrl,"操作速度过快,请在".$contTime."秒后再操作");
!$return && exit('{"State":-99,"MSG":"操作太快,请稍候"}');
}
呵呵哒,我很早之前就写过数组的排序,那时候真的写得一塌糊涂啦。现在也是,哈哈
/**
*数组排序
*$array 数组
*$key 键
*order asc是升序 desc是降序
**/
function arr_sort($array,$key,$order="asc"){
$arr_nums=$arr=array();
foreach($array as $k=>$v){
$arr_nums[$k]=$v[$key];
}
if($order=='asc'){
asort($arr_nums);
}else{
arsort($arr_nums);
}
foreach($arr_nums as $k=>$v){
$arr[$k]=$array[$k];
}
return $arr;
}
其实我自己是这样写的,也不能算我写得吧,因为我是这个思路,但是脑子糟糟的,所以不会写。
//已经是通过sql查出了一个数组了,然后就排序。反正是活动的时间排序
$var_arr_one = array();
$var_arr_two = array();
foreach($ac_list as $k=>$v){
if($v['endTime'] < time()){
$var_arr[] = $v;
}else{
$var_arr_two[] = $v;
}
}
$i =count($var_arr)-1;
for($i ;$i>=0;$i--){
$var_arr_1[] = $var_arr[$i];
}
if($var_arr_1){
$new = array_merge($var_arr_two,$var_arr_1);
}else{
$new = $var_arr_two;
}
这个又是算日期的,还有完没完了。
/**
*算两个日期相隔多少年,多少月,多少日
*
**/
function diffDate($date1,$date2){
if(strtotime($date1)>strtotime($date2)){
$tmp=$date2;
$date2=$date1;
$date1=$tmp;
}
list($Y1,$m1,$d1)=explode('-',$date1);
list($Y2,$m2,$d2)=explode('-',$date2);
$Y=$Y2-$Y1;
$m=$m2-$m1;
$d=$d2-$d1;
if($d<0){
$d+=(int)date('t',strtotime("-1 month $date2"));
$m--;
}
if($m<0){
$m+=12;
$y--;
}
return array('year'=>$Y,'month'=>$m,'day'=>$d);
}
那就先到这,我的妈呀,超级困得,因为我只睡了4个半小时。哎。