1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Title</title>
    6. <style>
    7. * {
    8. margin: 0;
    9. padding: 0;
    10. }
    11. input {
    12. width: 200px;
    13. height: 50px;
    14. line-height: 50px;
    15. padding: 10px;
    16. font-size: 20px;
    17. }
    18. button {
    19. width: 80px;
    20. height: 50px;
    21. line-height: 50px;
    22. font-size: 20px;
    23. }
    24. #info {
    25. margin-top: 15px;
    26. width: 220px;
    27. height: 50px;
    28. line-height: 50px;
    29. font-size: 20px;
    30. text-align: center;
    31. color: #00b38a;
    32. border: 1px solid darkmagenta;
    33. }
    34. .container {
    35. margin: 30px auto;
    36. width: 400px;
    37. }
    38. </style>
    39. </head>
    40. <body>
    41. <div class="container">
    42. <div>
    43. <input type="text" id="input" placeholder="请输入身份证号">
    44. <button id="btn">查询</button>
    45. </div>
    46. <div id="info">请输入身份证号</div>
    47. </div>
    48. <script>
    49. // 根据身份证号,展示这个身份证号籍贯(省+市)
    50. let provinceDatabase = {
    51. '13': {
    52. title: '河北省',
    53. cities: {
    54. '06': '保定',
    55. '02': '唐山',
    56. '01': '石家庄',
    57. '07': '张家口',
    58. '04': '邯郸'
    59. }
    60. },
    61. '41': {
    62. title: '河南省',
    63. cities: {
    64. '04': '许昌',
    65. '27': '周口',
    66. '30': '固始'
    67. }
    68. },
    69. '37': {
    70. title: '山东省',
    71. cities: {
    72. '01': '济南',
    73. '02': '青岛',
    74. '07': '潍坊',
    75. '10': '威海'
    76. }
    77. },
    78. '36': {
    79. title: '江西省',
    80. cities: {
    81. '01': '南昌',
    82. '02': '景德镇'
    83. }
    84. },
    85. '44': {
    86. title: '广东省',
    87. cities: {
    88. '01': '广州',
    89. '02': '韶关'
    90. }
    91. },
    92. '42': {
    93. title: '湖北省',
    94. cities: {
    95. '01': '武汉',
    96. '08': '荆门'
    97. }
    98. }
    99. };
    100. // 获取元素对象
    101. let btn = document.getElementById('btn');
    102. let input = document.getElementById('input');
    103. let info = document.getElementById('info');
    104. // 点击的时候才有触发行为,所以需要绑定点击事件
    105. let reg = /^(\d{2})(\d{2})\d{13}(?:\d|X)$/; // 捕获信息的正则
    106. btn.onclick = function () {
    107. // 点击事件触发时,执行这里面的代码
    108. // 1. 要获取 input 中输入的内容:通过 input 元素对象的 value 属性
    109. let val = input.value;
    110. // console.log(val);
    111. // 2. 要从输入的身份证号中,代表省的两位数字获取到,两位代表地级市的数字获取到(捕获)
    112. let result = reg.exec(val); // result 就是捕获到的内容,第二项和第三项是我们需要的省市代码;
    113. // console.log(result);
    114. let [, provinceCode, cityCode] = result; // 通过解构赋值把省市代码从捕获结果取出
    115. // console.log(provinceCode, cityCode);
    116. // 3. 拿到数字,去数据中把数字对应的省市取出来
    117. let target = provinceDatabase[provinceCode];
    118. let province = target.title; // 从数据中把省获取到
    119. let city = target.cities[cityCode]; // 从数据中获取省,再获取市
    120. console.log(province, city);
    121. // 4. 把得到的省市汉字插入到页面中 div#info 中
    122. info.innerHTML = `${province} ${city}`;
    123. }
    124. </script>
    125. </body>
    126. </html>