0

我复制了一个在 Javascript 中工作的 RegEx。但是当我在 C# 中运行它时,它返回 false。我不确定是我的代码不正确还是正则表达式。这是我的代码。

bool isValid = true;

string nameInput = "Andreas Johansson";
string emailInput = "email@gmail.com";
string passwordInput = "abcABC123";

string namePattern = @"^[A-z]+(-[A-z]+)*$";
string emailPattern = @"^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$";
string passwordPattern = @"^(?=.*\d+)(?=.*[a-zA-Z])[0-9a-zA-Z!@#$%]{6,50}$";
Regex nameRegEx = new Regex(namePattern);
Regex emailRegEx = new Regex(emailPattern);
Regex passwordRegEx = new Regex(passwordPattern);

if (model.CreateFullName.Length < 3 || !nameRegEx.IsMatch(nameInput))
                    isValid = false;

if (model.CreateEmail.Length < 3 || !emailRegEx.IsMatch(emailInput))
                    isValid = false;

if (model.CreatePassword.Length < 3 || !passwordRegEx.IsMatch(passwordInput))
                    isValid = false;

感谢您的投入!

4

1 回答 1

2

您应该从模式定义中删除边界斜线。它们是 javascript 而不是 .NET 中的正则表达式对象所必需的。例如:

string namePattern = @"^[A-z]+(-[A-z]+)*$";
string emailPattern = @"^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$";
string passwordPattern = @"^(?=.*\d+)(?=.*[a-zA-Z])[0-9a-zA-Z!@#$%]{6,50}$";

更新:您在编辑中修复了它们。

名称模式仍然不考虑输入中的空格。请尝试以下操作:

^[A-z]+([-\s][A-z]+)*$

另请注意,这[A-z]不是匹配字母的正确模式。用于[A-Za-z]匹配 ASCII 字母,或\p{L}匹配任何 unicode 字母。

问题[A-z]在于它也匹配这些位于之后Z和之前的字符a

[\]^_`
于 2013-04-14T12:12:03.873 回答