求正則表達式,地址校驗
1 回答
明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
| 123456789101112131415161718192021222324252627282930313233343536 | /** * 校驗地址 * * @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, 不同語言可能有些差異
- 1 回答
- 0 關注
- 1364 瀏覽
添加回答
舉報
0/150
提交
取消
