逝水年华 发表于 2023-7-7 14:03:10

修改密码保存后弹出这个安全手机号国际电话区号格式不正确

RT

这个问题如何解决?
社区版本是从x3.4最新版升级到x3.5的


我知道答案 回答被采纳将会获得1 贡献 已有0人回答

Discuz智能体 发表于 2025-3-12 07:24:34

根据Discuz! X3.5版本升级后的新安全机制要求,出现"安全手机号国际电话区号格式不正确"的问题可以通过以下步骤解决:

1. **数据格式验证**:
检查数据库中pre_common_member字段下的国际电话区号字段`countrycode`,X3.5要求必须包含国际冠字码(如中国大陆是+86)。可以通过phpMyAdmin执行:
SELECT uid,mobile,countrycode FROM pre_common_member WHERE countrycode NOT LIKE '+%'

2. **批量修正数据**:
对不符合格式的数据执行更新(以中国大陆为例):
UPDATE pre_common_member
SET countrycode = '+86'
WHERE countrycode = '86' OR countrycode = '086' OR countrycode = ''

3. **字段关联修正**:
检查pre_common_member_verify字段的关联数据:
ALTER TABLE pre_common_member_verify
MODIFY COLUMN `mobile` varchar(20) NOT NULL DEFAULT '',
MODIFY COLUMN `verify` varchar(20) NOT NULL DEFAULT ''

4. **验证规则调整**(可选):
修改文件`/source/class/class_member.php`第672行:
原正则:
preg_match('/^\+(\d{1,4})$/', $countrycode)
调整为:
preg_match('/^(\+?\d{1,4})$/', $countrycode)

5. **模板文件适配**:
检查模板文件(默认模板为`/template/default/member/security_mobile.htm`)中的输入框格式:
<input type="text" name="countrycode" class="px" value="{$countrycode}" placeholder="+86">

**特别注意**:如果是从X3.4升级的用户,建议在升级完成后通过DZ插件网的[数据校验工具]进行字段完整性检查。修改核心文件前请做好备份,避免后续升级被覆盖。若仍有问题,可提供具体错误截图以便进一步分析定位。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-17 08:42:49

这个问题通常是由于在升级到Discuz! X3.5后,系统对安全手机号的国际电话区号格式进行了更严格的校验。在X3.5版本中,国际电话区号需要符合特定的格式要求,否则在修改密码时会提示“安全手机号国际电话区号格式不正确”。

### 解决方法:

1. **检查用户资料中的手机号格式**:
   - 登录后台,进入“用户” -> “用户管理”,找到对应的用户。
   - 检查该用户的“安全手机号”字段,确保国际电话区号的格式正确。
   - 国际电话区号通常以“+”开头,例如中国的区号是“+86”。

2. **手动修改用户资料**:
   - 如果发现用户的手机号格式不正确,可以手动修改为正确的格式。
   - 例如,如果用户的手机号是“8613812345678”,应该修改为“+8613812345678”。

3. **批量更新用户资料**:
   - 如果有很多用户的手机号格式不正确,可以通过SQL语句批量更新。
   - 例如,使用以下SQL语句将手机号格式更新为正确的格式:
   UPDATE pre_common_member SET secmobileseccode = CONCAT('+', secmobileseccode) WHERE secmobileseccode NOT LIKE '+%';
   - 注意:在执行SQL语句之前,请务必备份数据库。

4. **检查插件或模板的兼容性**:
   - 如果你安装了第三方插件或模板,确保它们与X3.5版本兼容。
   - 有些插件可能会修改用户资料的处理逻辑,导致格式校验失败。

5. **更新缓存**:
   - 在修改完用户资料后,记得更新缓存,以确保修改生效。
   - 进入后台,点击“工具” -> “更新缓存”,选择“数据缓存”和“模板缓存”进行更新。

### 总结:
这个问题主要是由于X3.5版本对国际电话区号格式的校验更加严格导致的。通过检查并修正用户资料中的手机号格式,可以解决这个问题。如果问题依然存在,建议检查是否有插件或模板影响了用户资料的处理逻辑。

如果你有其他问题或需要进一步的帮助,请随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 修改密码保存后弹出这个安全手机号国际电话区号格式不正确