微信小程序订阅消息参数校验正则
public function verifySubscribe($data){
$checkNameReg = '/^[\u4E00-\u9FA5]+$|^[a-zA-Z]+[\u4E00-\u9FA5]+$|^[\u4E00-\u9FA5]+[a-zA-Z]+$|^[a-zA-Z]+$/';
$checkNumberReg = '/\d/';
$letter='/^[a-zA-Z]+$/';//字母
$checkOnlyChinaReg='/^[\u4E00-\u9FA5]+$/';
$checkChinaAndEngReg='/^[\u4E00-\u9FA5]+$|^[a-zA-Z]+[\u4E00-\u9FA5]+$|^[\u4E00-\u9FA5]+[a-zA-Z]+$/';
//特殊符号
$checkSymbol = '/^[ \'.,:;*?~`!@#$%^&+=)(<>{}]|\]|\[|\/|\\\|\"|\|+$/';
//数字
$checkCharacterString = '/([\x{4e00}-\x{9fa5}]+)/u';
$amount = '/^(\¥|\¥|\$|\€|\R\$|\лв|\£|\S\$|\ARS\$|\₫){1}[0-9]+$/';
$isMob="/^1[34578]{1}\d{9}$/";//电话
$isTel="/^([0-9]{3,4}-)?[0-9]{7,8}$/";//座机
$carNumber1 = "/[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使]{1}[A-Z]{1}[0-9a-zA-Z]{5}$/u";//民用
$carNumber2 = '/[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新]{1}[A-Z]{1}[0-9a-zA-Z]{4}[挂警学领港澳]{1}$/u';//挂
$carNumber3 = "/[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新]{1}[A-Z]{1}[DF]{1}[0-9a-zA-Z]{5}$/u";//新能源
$carNumber4 = "/[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新]{1}[A-Z]{1}[0-9a-zA-Z]{5}[DF]{1}$/u";//大型新能源
$carNumber5 = '/^WJ[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新]?[0-9a-zA-Z]{5}$/ui';//武警
$carNumber6 = "/[A-Z]{2}[0-9]{5}$/";//军用
$phrase = '/^[\u4e00-\u9fa5]+$/';//汉字
switch ($data['key']){
case 'thing':
if(mb_strlen($data['value'])>20){
Response::error($data['title'].'内容不正确,该字段限制20个字符以内,内容格式不限,符号不能带有换行等控制字符');
}
break;
case 'number':
if(!is_numeric($data['value'])||mb_strlen($data['value'])>32){
Response::error($data['title'].'内容不正确,该字段内容限制32位以内,只可输入数字,可带小数');
}
break;
case 'letter':
if(!preg_match($letter,$data['value'])||mb_strlen($data['value'])>32){
Response::error($data['title'].'内容不正确,该字段内容限制32位以内,只可输入字母;');
}
die;
break;
case 'symbol':
if(!preg_match($checkSymbol,$data['value'])||mb_strlen($data['value'])>5){
Response::error($data['title'].'内容不正确,该字段内容限制5位以内,只可输入符号,不能带有换行等控制字符;');
}
break;
case 'character_string':
if(preg_match($checkCharacterString,$data['value'])||mb_strlen($data['value'])>32){
Response::error($data['title'].' 内容不正确,该字段内容限制32位以内,可数字、字母或符号组合,符号不能带有换行等控制字符;');
}
break;
case 'time':
case 'date':
$data['value'] = explode('~',$data['value']);
foreach ( $data['value'] as $v){
if(strstr($v,'年')&&strstr($v,'月')){
$v = str_replace('年','-',$v);
}else{
$v = str_replace('年','',$v);
}
if(strstr($v,'月')&&strstr($v,'日')){
$v = str_replace('月','-',$v);
}else{
$v = str_replace('月','',$v);
}
$v = str_replace('日','',$v);
if(!strtotime($v)){
Response::error($data['title'].'内容不正确,该字段只可填写24小时制时间格式(支持+年月日),支持填时间段,两个时间点之间用“~”符号连接;');
}
}
break;
case 'amount':
$data['value'] = str_replace('元','',$data['value']);
if(!preg_match($amount,$data['value'])||mb_strlen($data['value'])>10){
Response::error($data['title'].'内容不正确,该字段只可填写1个币种符号+10位以内纯数字,可带小数,结尾可带“元”;');
}
break;
case 'phone_number':
if((!preg_match($isMob,$data['value']) && !preg_match($isTel,$data['value']))||mb_strlen($data['value'])>17){
Response::error($data['title'].'内容不正确,该字段只可填写17位以内数字、符号,数字可带小数,符号不能带有换行等控制字符;');
}
break;
case 'car_number':
if(!(preg_match($carNumber1,$data['value'])||preg_match($carNumber2,$data['value'])||preg_match($carNumber3,$data['value'])||preg_match($carNumber2,$data['value'])||preg_match($carNumber4,$data['value'])||preg_match($carNumber5,$data['value'])||preg_match($carNumber6,$data['value']))||mb_strlen($data['value'])>8){
Response::error($data['title'].'内容不正确,该字段内容限制8位以内,第一位与最后一位可为汉字,其余为字母或数字;');
}
break;
case 'name':
//判断name字符合法性,违规则设为初始值
if(preg_match_all($checkNameReg,$data['value'],$matches_1) //验证是否符合name规范(没判断长度)
|| preg_match($checkNumberReg,$data['value']) //如果含数字则违规
||(preg_match($checkOnlyChinaReg,$data['value']) || mb_strlen($data['value'])>10) //如果纯中文且超出10个字则违规
||(preg_match($letter,$data['value']) || mb_strlen($data['value'])>20) //如果是纯英文且超出20个则违规
||(preg_match($checkChinaAndEngReg,$data['value'])|| mb_strlen($data['value'])>10)){ //如果是中英混合且超出10个字则违规
Response::error($data['title'].'内容不正确,该字段内容只可填写10个以内纯汉字或20个以内纯字母或符号,中文和字母混合按中文名算,10个字内,符号不能带有换行等控制字符;');
}
break;
case 'phrase':
if(preg_match($phrase,$data['value'])||mb_strlen($data['value'])>5){
Response::error($data['title'].'内容不正确,该字段内容限制5个字以内,只可输入纯汉字');
}
break;
}
}