在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

求正则表达式,地址校验

高手们哪位知道,求正则表达式,地址校验
最新回答
叫我饭桶!

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中进行校验