只允许输入字母

2024-05-15

如何过滤虚拟键盘中的非字母键?

以下方法仅适用于拉丁字母,不幸的是:

public static bool IsLetter(int val) {
        return InRange(val, 65, 90) || InRange(val, 97, 122) || InRange(val, 192, 687) || InRange(val, 900, 1159) ||
               InRange(val, 1162, 1315) || InRange(val, 1329, 1366) || InRange(val, 1377, 1415) ||
               InRange(val, 1425, 1610);
    }

    public static bool InRange(int value, int min, int max) {
        return (value <= max) & (value >= min);
    }

我认为您可以使用正则表达式来实现此目的,在 TextBox 的 KeyUp 事件中触发 - 当用户释放按键时,该方法将检查他按下的内容是否符合您的要求。它可以看起来像这样:

myTextbox.KeyUp += myTextbox_KeyUp; // somewhere in Page Constructor

private void myTextbox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
    Regex myReg = new Regex(@"\d");
    if (myReg.IsMatch(e.Key.ToString()) || e.Key == Key.Unknown)
    {
       string text = myTextbox.Text;
       myTextbox.Text = text.Remove(text.Length - 1);
       myTextbox.SelectionStart = text.Length;
    }
}

上面的代码检查是否有按下的任何数字或未知键(调试以查看它们是哪些) - 如果用户按下了数字,则最后输入的字符将从文本中删除。您还可以以不同的方式定义正则表达式,例如仅允许字母:

Regex myReg = new Regex(@"^[a-zA-Z]+$");
if (!myReg.IsMatch(e.Key.ToString()) || e.Key == Key.Unknown)
{ // the same as above }

我假设您已经设置了scope http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh393998%28v=vs.105%29.aspx你的键盘。

EDIT- 非拉丁键盘

如果您使用例如西里尔字母,上面的代码不会成功,那么 e.Key 将是 Key.Unknown 这会导致一些问题。但我已经成功地通过检查输入的最后一个字符(如果是非字母数字)来处理此任务\W或数字\d,删除它 - 即使使用奇怪的字符也能正常工作:

private void myTextbox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
   string added = myTextbox.Text.ElementAt(myTextbox.Text.Length - 1).ToString();
   Regex myReg = new Regex(@"[\W\d]");

   if (myReg.IsMatch(added))
   {
      string text = myTextbox.Text;
      myTextbox.Text = text.Remove(text.Length - 1);
      myTextbox.SelectionStart = text.Length;
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

只允许输入字母 的相关文章

随机推荐

  • jQuery 价格滑块过滤器

    我已经创建了 jquery 价格滑块 但我不知道如何过滤我的结果 以便在滑动时您只能看到具有该值范围内的产品 HTML div class demo p p div
  • 全局未在 ../node_modules/socket.io-parser/is-buffer.js 中定义

    预先感谢您帮助我 我正在尝试在我的一个角度组件中连接套接字 但在浏览器的控制台中它会抛出一个错误 指出 Global 未在 Object node modules socket io parser is buffer js 中定义 这是我的
  • CustomNSError 协议有什么作用以及为什么我应该采用它?

    什么是CustomNSError协议的用途以及为什么我应该采用它 Apple提供的文档仅指出 描述错误类型 具体提供域 代码和 用户信息字典 我已经在谷歌上搜索过 但找不到与我的问题相关的任何内容 每种类型都符合Error协议是隐含地桥接的
  • iTunes connect 中不同应用程序的多个银行帐户[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 由于我们正在为客户开发 iPhone 应用程序 并且他希望对该应用程序收费 因此我们想知道是否可以在 iTunes 中连接多个银行帐户 以便将收入直接
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • R闪亮主面板显示样式和字体

    我正在学习闪亮的应用程序 并且有一些关于调整布局的基本问题 特别是样式和字体 希望得到指点或明确的答案 谢谢 考虑一个基本的输入输出应用程序 用户在 sidebarPanel 中输入数据 然后在 mainPanel 中反应性地输出结果 如何
  • 重新选择 - 创建一个仅用于获取部分状态的记忆选择器是否有意义?

    我有一个普通的选择器 仅用于获取状态的一部分 export const getAllPosts state gt return state posts 如果我使用重新选择来包装选择器 import createSelector from r
  • 在哪里可以下载 Google Cloud Datastore 的离线文档?

    有没有比使用网络爬虫更好的方法来下载谷歌云数据存储文档以供离线查看 我还没有找到任何东西 谢谢 抱歉 我们目前不支持在 Developers google com 上托管的任何文档
  • 底部页脚的 css 布局,动态 ajax 内容更改页面高度

    Update 实际上 我现在通过放弃固定页脚设计来解决这个问题 动态内容移动页脚并适当调整容器大小似乎没有问题 除非页脚最初固定在浏览器底部 我希望其他人最终能够提供一个兼具两全其美的出色解决方案 I spent all day tryin
  • 从 data.frame 中提取时用 NA 填充缺失的列

    我有一个函数 它将具有某些列的数据框作为输入 columns a b z 现在我有一个数据框DF只有很少的这些列DF columns f u z 如果列不在其中 如何创建一个包含所有值为 NA 的列的数据框DF这与DF在柱子上 f u z
  • Google Drive SDK:通过域超级管理员访问权限将文件从一个用户复制到另一个用户

    假设我是域超级管理员 并且 有用户 A 源 要复制的文件 和用户 B 目标 要复制到的文件 是否有可用于此功能的 Google Drive SDK API 当我读到这篇文章时 https developers google com driv
  • 上下文更改后 Docker“协议不可用”

    我改变了我的码头环境 现在 当我运行任何 docker 命令时 我得到protocol not available 如果无法运行任何 docker 命令 如何更改回上下文 基本上我做了以下事情 I ran docker context li
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • NodeJS CPU 一次飙升至 100%

    我有一个用 NodeJS 编写的 SOCKS5 代理服务器 我正在使用原生net and dgram打开 TCP 和 UDP 套接字的库 它可以正常工作大约 2 天 所有 CPU 的最大利用率约为 30 两天没有重新启动后 一个 CPU 峰
  • 在 Rails 3 中选择性地关闭 Devise 的 Flash 通知

    Devise 身份验证框架在各处都使用 Flash 通知 这使得与应用程序集成变得很容易 但有时会导致用户体验不佳 我想知道有什么简单的方法可以有选择地关闭 Rails 3 应用程序中的一些 Devise flash 通知 特别是 我想摆脱
  • 只允许输入字母

    如何过滤虚拟键盘中的非字母键 以下方法仅适用于拉丁字母 不幸的是 public static bool IsLetter int val return InRange val 65 90 InRange val 97 122 InRange