【正則】如何寫判斷提交的使用者名稱中不包含如下特殊字元?求方法
本帖最後由 default7 於 2014-05-25 18:39:45 編輯
對提交的註冊使用者名稱 $uname 的需求:
1 要求名稱可以由中文 英文混合組成,但是中間不能包含有空格
2 不能包含如下 $arr2 中的特殊字元
3 但是可以包含中文的 左右括弧 “(” “)”
function checkReg($uname)
{
/**
//寫成簡短的
$arr2 = array(
'~', '!', '@', '#', '$', '%', '^', '&', '*', '_', '+', '|', '-', '=', '\\',
'{', '}', '[', ']', ':', ';', '"', '\'', '<', '>', ',', '.', '?', '/', '“', '”',
'’', '‘', '【', '】', '~', '!', '¥', '……', '——', '、', '《', '》', '。',
PHP_EOL, chr(10), chr(13), "\t", chr(32),
);
**/
$arr2 = array(
'~',
'!',
'@',
'#',
'$',
'%',
'^',
'&',
'*',
'_',
'+',
'|',
'-',
'=',
'\\',
'{',
'}',
'[',
']',
':',
';',
'"',
'\'',
'<',
'>',
',',
'.',
'?',
'/',
'“',
'”',
'’',
'‘',
'【',
'】',
'~',
'!',
'¥',
'……',
'——',
'、',
'《',
'》',
'。',
PHP_EOL,
chr(10),
chr(13), //\r\n
"\t",
chr(32),
);
foreach ($arr2 as $k) {
//我之前用 preg_match 結果有亂碼,全亂了。後來用strpos (default7#zbphp.com)
if (strpos($uname, $k) !== false) {
$tips = "註冊名中不能含有空格、點、逗號等特殊字元!";
return array(false, $tips);
}
}
return array(true, 'ok');
}
------解決方案--------------------
if($s == str_replace($arr2, '', $s)) {
//不包含特殊字元
}else{
//包含特殊字元
}