You need to enable JavaScript to run this app. 如何将输入框阿拉伯数字转为英文数字,解决输入阿拉伯数字导致应用闪退问题
优惠活动
大模型
产品
解决方案
定价
更多

如何将输入框阿拉伯数字转为英文数字,解决输入阿拉伯数字导致应用闪退问题

问题修复方案

根因说明

  • 现有转换逻辑仅在提交按钮点击时触发,且字典覆盖的阿拉伯数字变体不全,未转换的非英文数字传入int.Parse时会直接抛出格式异常导致崩溃
  • 转换方法未做空值校验,若输入框内容为空时调用Replace方法会触发空引用异常
  • 空值补0逻辑顺序错误,若输入为空会先追加空换行,极端场景下会导致后续取最后一行文本时解析失败

修复步骤

1. 新增输入实时转换逻辑

给两个输入框Entnum1、Entnum2绑定TextChanged事件,输入过程中自动将阿拉伯/波斯数字转为英文数字,同时过滤非数字字符,用户输入时就能看到转换后的结果:

private void EntNum_TextChanged(object sender, TextChangedEventArgs e)
{
    var entry = sender as Entry;
    if (string.IsNullOrEmpty(entry.Text)) return;
    
    StringBuilder newText = new StringBuilder();
    foreach (char c in entry.Text)
    {
        // 转换阿拉伯数字(U+0660~U+0669)
        if (c >= '٠' && c <= '٩')
        {
            newText.Append((char)('0' + (c - '٠')));
        }
        // 转换波斯数字(U+06F0~U+06F9)
        else if (c >= '۰' && c <= '۹')
        {
            newText.Append((char)('0' + (c - '۰')));
        }
        // 保留英文数字和控制字符(删除、光标移动等)
        else if (char.IsDigit(c) || char.IsControl(c))
        {
            newText.Append(c);
        }
    }
    // 避免循环触发事件
    if (newText.ToString() != entry.Text)
    {
        entry.Text = newText.ToString();
        entry.CursorPosition = entry.Text.Length;
    }
}

2. 修复提交逻辑

调整空值处理顺序,用int.TryParse替代int.Parse彻底避免解析崩溃,原有ARCH转换方法可直接删除:

private async void btnRegister_Clicked(object sender, EventArgs e)
{
    try
    {
        scrollView.HeightRequest = num1.HeightRequest;
        scroll = false;

        // 先处理输入空值,默认补0
        string input1 = string.IsNullOrEmpty(Entnum1.Text) ? "0" : Entnum1.Text;
        string input2 = string.IsNullOrEmpty(Entnum2.Text) ? "0" : Entnum2.Text;

        // 追加到文本控件
        num1.Text += "\n" + input1;
        num2.Text += "\n" + input2;

        // 安全解析数字累加
        if (int.TryParse(input1, out int add1)) SUM1 += add1;
        if (int.TryParse(input2, out int add2)) SUM2 += add2;

        // 剩余原有逻辑保持不变
        // ...
    }
    catch (Exception ex)
    {
        await DisplayAlert("Opps!", ex.Message, "Ok");
        await Navigation.PopAsync();
    }
}

3. 可选强化限制

给两个输入框设置Keyboard = Keyboard.Numeric,弹出系统数字键盘,从输入源头减少非数字内容输入的可能。

内容的提问来源于stack exchange,提问作者TariqAlsunaydih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 05:54:03