2024-10-16 08:29:45
/**
* 校验地址
*
* @param string $str_addr utf-8编码的地址字符串
*
* @return string 校验通过返回格式化后的字符串, 失败返回空字符串
*/
function checkAddr($str_addr) {
//把全角特殊字符替换为半角
$str_addr = str_replace(['(', ')', '-', '#'], ['(', ')', '-', '#'], $str_addr);
//长度判断(不使用正则效率更高,也可以降低正则的复杂度)
if (!isset($str_addr{16})) {
return '';
}
/**
* 简单说明
* 首尾的'/'是php里的正则定界符, 把正则表达式包含起来,其它语言可能没有
* 末尾 'u', 是模式修饰符, 表示模式和目标字符串都被认为是 utf-8, 其它语言可能不同
* \x{4e00}-\x{9fa5} 是utf-8字符集中汉字的范围, 有些正则引擎中写法是 \u4e00-\u9fa5
* a-zA-Z 分别是从a到z的所有大小写字母
* (?2) 是引用第2个括号的匹配模式, 也就是等价于 ([\x{4e00}-\x{9fa5}a-zA-Z()\-#]*)
*/
$reg = '/^(([\x{4e00}-\x{9fa5}a-zA-Z()\-#]*)\d+(?2))+$/u';
//若要使用正则来判断字符串的长度, 正则前面可增加一个零宽断言 (?=.{17,})
$reg1 = '/^(?=.{17,})(([\x{4e00}-\x{9fa5}a-zA-Z()\-#]*)\d+(?2))+$/u';
//检查
if (preg_match($reg, $str_addr)) {
return $str_addr;
} else {
return '';
}
}
不知道你使用的是什么语言, 以上代码是PHP, 不同语言可能有些差异
用的是jsp,页面jsp,然后在js中校验,还要在java中进行校验