utils.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _area2 = require('../area');
  6. var _area3 = _interopRequireDefault(_area2);
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. /**
  9. * 通过地区编码返回省市区对象
  10. * @param code
  11. * @returns {{code: *, province: (*|string), city: (*|string), area: (*|string)}}
  12. */
  13. function getAreaByCode(code) {
  14. var pCode = code.slice(0, 2) + '0000',
  15. cCode = code.slice(0, 4) + '00';
  16. return {
  17. code: code,
  18. province: _area3.default.province_list[pCode] || '',
  19. city: _area3.default.city_list[cCode] || '',
  20. area: _area3.default.area_list[code] || ''
  21. };
  22. }
  23. /**
  24. * 通过code取父省市对象
  25. * @param target province/city/area
  26. * @param code
  27. * @returns {Array} [province, city, area]
  28. */
  29. /**
  30. * address-parse
  31. * MIT License
  32. * By www.asseek.com
  33. */
  34. function getTargetParentAreaListByCode(target, code) {
  35. var result = [];
  36. result.unshift({
  37. code: code,
  38. name: _area3.default.area_list[code] || ''
  39. });
  40. if (['city', 'province'].includes(target)) {
  41. code = code.slice(0, 4) + '00';
  42. result.unshift({
  43. code: code,
  44. name: _area3.default.city_list[code] || ''
  45. });
  46. }
  47. if (target === 'province') {
  48. code = code.slice(0, 2) + '0000';
  49. result.unshift({
  50. code: code,
  51. name: _area3.default.province_list[code] || ''
  52. });
  53. }
  54. return result;
  55. }
  56. /**
  57. * 根据省市县类型和对应的`code`获取对应列表
  58. * 只能逐级获取 province->city->area OK province->area ERROR
  59. * @param target String province city area
  60. * @param code
  61. * @param parent 默认获取子列表 如果要获取的是父对象 传true
  62. * @returns {*}
  63. */
  64. function getTargetAreaListByCode(target, code, parent) {
  65. if (parent) return getTargetParentAreaListByCode(target, code);
  66. var result = [];
  67. var list = _area3.default[{
  68. city: 'city_list',
  69. area: 'area_list'
  70. }[target]];
  71. if (code && list) {
  72. code = code.toString();
  73. var provinceCode = code.slice(0, 2);
  74. var cityCode = code.slice(2, 4);
  75. if (target === 'area' && cityCode !== '00') {
  76. code = '' + provinceCode + cityCode;
  77. for (var j = 0; j < 100; j++) {
  78. var _code = '' + code + (j < 10 ? '0' : '') + j;
  79. if (list[_code]) {
  80. result.push({
  81. code: _code,
  82. name: list[_code]
  83. });
  84. }
  85. }
  86. } else {
  87. for (var i = 0; i < 91; i++) {
  88. //最大city编码只到91
  89. //只有city跟area
  90. code = '' + provinceCode + (i < 10 ? '0' : '') + i + (target === 'city' ? '00' : '');
  91. if (target === 'city') {
  92. if (list[code]) {
  93. result.push({
  94. code: code,
  95. name: list[code]
  96. });
  97. }
  98. } else {
  99. for (var _j = 0; _j < 100; _j++) {
  100. var _code2 = '' + code + (_j < 10 ? '0' : '') + _j;
  101. if (list[_code2]) {
  102. result.push({
  103. code: _code2,
  104. name: list[_code2]
  105. });
  106. }
  107. }
  108. }
  109. }
  110. }
  111. } else {
  112. for (var _code3 in list) {
  113. result.push({
  114. code: _code3,
  115. name: list[_code3]
  116. });
  117. }
  118. }
  119. return result;
  120. }
  121. /**
  122. * 通过省市区非标准字符串准换为标准对象
  123. * 旧版识别的隐藏省份后缀的对象可通过这个函数转换为新版支持对象
  124. * @param province
  125. * @param city
  126. * @param area
  127. * @returns {{code: string, province: string, city: string, area: string}}
  128. */
  129. function getAreaByAddress(_ref) {
  130. var province = _ref.province,
  131. city = _ref.city,
  132. area = _ref.area;
  133. var province_list = _area3.default.province_list,
  134. city_list = _area3.default.city_list,
  135. area_list = _area3.default.area_list;
  136. var result = {
  137. code: '',
  138. province: '',
  139. city: '',
  140. area: ''
  141. };
  142. for (var _code in province_list) {
  143. var _province = province_list[_code];
  144. if (_province.indexOf(province) === 0) {
  145. result.code = _code;
  146. result.province = _province;
  147. _code = _code.substr(0, 2);
  148. for (var _code_city in city_list) {
  149. if (_code_city.indexOf(_code) === 0) {
  150. var _city = city_list[_code_city];
  151. if (_city.indexOf(city) === 0) {
  152. result.code = _code_city;
  153. result.city = _city;
  154. if (area) {
  155. _code_city = _code_city.substr(0, 4);
  156. for (var _code_area in area_list) {
  157. if (_code_area.indexOf(_code_city) === 0) {
  158. var _area = area_list[_code_area];
  159. if (_area.indexOf(area) === 0) {
  160. result.code = _code_area;
  161. result.area = _area;
  162. break;
  163. }
  164. }
  165. }
  166. }
  167. break;
  168. }
  169. }
  170. }
  171. break;
  172. }
  173. }
  174. return result;
  175. }
  176. /**
  177. * 字符串占位长度
  178. * @param str
  179. * @returns {number}
  180. */
  181. function strLen(str) {
  182. var l = str.length,
  183. len = 0;
  184. for (var i = 0; i < l; i++) {
  185. len += (str.charCodeAt(i) & 0xff00) !== 0 ? 2 : 1;
  186. }
  187. return len;
  188. }
  189. var Reg = {
  190. mobile: /(86-[1][3-9][0-9]{9})|(86[1][3-9][0-9]{9})|([1][3-9][0-9]{9})/g,
  191. phone: /(([0-9]{3,4}-)[0-9]{7,8})|([0-9]{12})|([0-9]{11})|([0-9]{10})|([0-9]{9})|([0-9]{8})|([0-9]{7})/g,
  192. zipCode: /([0-9]{6})/g
  193. };
  194. function shortIndexOf(address, shortName, name) {
  195. var index = address.indexOf(shortName);
  196. var matchName = shortName;
  197. if (index > -1) {
  198. for (var i = shortName.length; i <= name.length; i++) {
  199. var _name = name.substr(0, i);
  200. var _index = address.indexOf(_name);
  201. if (_index > -1) {
  202. index = _index;
  203. matchName = _name;
  204. } else {
  205. break;
  206. }
  207. }
  208. }
  209. return { index: index, matchName: matchName };
  210. }
  211. var Utils = {
  212. shortIndexOf: shortIndexOf,
  213. strLen: strLen,
  214. getAreaByCode: getAreaByCode,
  215. getAreaByAddress: getAreaByAddress,
  216. getTargetAreaListByCode: getTargetAreaListByCode,
  217. Reg: Reg
  218. };
  219. exports.default = Utils;