1

我正在尝试本地化具有以下逻辑的现有应用程序,该逻辑尝试验证密码文本框。我假设这不适用于具有用户可以在文本框中键入的特殊字符的语言。我对么?我不认为我们想限制用户输入非英语类型的字符(即阿拉伯语、中文等)。或者,有什么我不明白的吗?

Regex ValidHex =
   new Regex("[A-Za-z1234567890_-]+", RegexOptions.IgnoreCase);
if (!ValidHex.IsMatch(e.Text))
{
   e.Handled = true;
}
4

4 回答 4

8

你可以这样做来支持 unicode 字符:

[\p{L}\p{N}_-]+

作为旁注:是否有任何具体原因需要限制允许的字符?

于 2009-09-25T20:52:19.310 回答
7

不要存储密码!

使用加密散列函数对密码进行散列并进行比较。

于 2009-09-25T20:49:46.303 回答
1

该正则表达式不是一个特别好的表达式,它限制了用户的选项并且不强制执行任何操作(密码“a”和“aaaaaaa”会通过)。顾名思义,它是从验证十六进制数字的表达式中采用的。您至少必须添加一个最小长度条件(在 reg ex 或 e.Text.Length > 8 中)。

一个更明智的表达方式将验证至少使用了多个组的 1 个字符,我挖出了这个: @"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)" 见这里。再次,添加最小长度检查。

这个例子没有解决本地化问题,它只允许非拉丁字符通过'.'。并且不认为它们满足 [az] 或 [AZ] 要求。

于 2009-09-25T21:32:30.593 回答
0

您是否尝试过使用 \w 而不是 A-za-z?我打赌这将解决本地化问题。

于 2009-09-25T20:52:07.937 回答