我正在尝试本地化具有以下尝试验证密码文本框的逻辑的现有应用。我假设这不适用于具有特殊字符的语言,用户可以在文本框中键入。我对么?我认为我们不想限制用户输入非英文字符(即阿拉伯语,中文等)。或者,有什么我不理解的吗?
Regex ValidHex =
new Regex("[A-Za-z1234567890_-]+", RegexOptions.IgnoreCase);
if (!ValidHex.IsMatch(e.Text))
{
e.Handled = true;
}
答案 0 :(得分:8)
您可以这样做以支持unicode字符:
[\p{L}\p{N}_-]+
作为旁注:是否有任何特定原因需要限制允许的字符?
答案 1 :(得分:6)
不要存储密码!
使用cryptographic hashing function哈希密码并对其进行比较。
答案 2 :(得分:1)
正则表达式不是特别好的,它限制用户选项并且不强制执行任何操作(密码'a'和'aaaaaaa'将通过)。该名称表明它是从验证Hex数字的表达式中采用的。你至少需要添加一个最小长度条件(在reg ex中或作为e.Text.Length> 8)。
一个更明智的表达方式将验证至少有一个字符组成了几个组,我挖出了这个:@"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)"
See here。
再次,添加最小长度检查。
这个例子没有解决本地化的问题,它只允许非拉丁字符通过'。'并不认为它们满足[a-z]或[A-Z]的要求。
答案 3 :(得分:0)
您是否尝试使用\ w而不是A-za-z?我打赌这会解决本地化问题。