有人能帮我把这个用C#写的正则表达式转换成javascript吗?

有人能帮我把这个用C#写的正则表达式转换成javascript吗?,c#,javascript,html,regex,client-side,C#,Javascript,Html,Regex,Client Side,我必须对文本框中的文本进行模式匹配。我是在C#中服务器的回发事件中这样做的。 我的正则表达式如下: public bool ValidatePassword(string temp) { bool isMatch = false; passwd = passwd.Trim(); isMatch = Regex.IsMatch(temp, @"^ # Start

我必须对文本框中的文本进行模式匹配。我是在C#中服务器的回发事件中这样做的。 我的正则表达式如下:

 public bool ValidatePassword(string temp)
    {
        bool isMatch = false;
        passwd = passwd.Trim();

        isMatch = Regex.IsMatch(temp,
                             @"^           # Start of string
                        (?=.*\p{Lu})      # Assert at least one uppercase letter
                        (?=.*\p{Ll})      # Assert at least one lowercase letter
                        (?=.*\d)          # Assert at least one digit
                        (?=.*[^\p{L}\d])  # Assert at least one other character
                        .{8,13}           # Match at least 8 characters and maximum of 13 characters
                        $                 # End of string",
                             RegexOptions.IgnorePatternWhitespace);


        return isMatch;
    }
我想将其移动到Javascript,以便在客户端进行匹配。有人能帮我将此函数移动到Javascript吗?

类似于:

function ValidatePassword(temp) {
  return /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,13}$/.test(temp);
}

在Javascript中匹配大写和小写字母并不容易,因为它不支持
\p{…}
字符类。我建议你在正则表达式之外测试这个。另外,“其他字符”很难定义,是仅仅是
[^a-z0-9]
,还是也没有umlauts等?顺便说一句,你应该强制使用更长的密码,而不是更神秘的密码

function validatePassword(temp) {
    // temp = temp.trim() - is not supported in all browsers or needs to be shimmed
    //                      will be done in the regex

    if (temp.toUpperCase() == temp) // no lowercase char
        return false;
    if (temp.toLowerCase() == temp) // no uppercase char
        return false;

    return temp.test(/^\s*(?=.*\d).{8,13}\s*$/);
}

JavaScript正则表达式实现只理解拉丁字符的情况,它不实现国家字符语义,因此,不幸的是,没有办法翻译此正则表达式,即使是在靠近原点的任何地方

如果您将此作为一个学习练习,那么,也许您可以看看正则表达式的Perl实现并获得它的副本。但是,如果你的问题更多的是在实际领域,那么考虑你的目标受众和他们可能在键入什么语言,查找Unicode代码点,以便在他们的字符集中的微小/大写字母,并相应地采取行动。还要注意的是,许多非拉丁语言没有字母大小写的概念


或者,也许考虑更严格的密码规则。p> 这可能会对您有所帮助。

\p{Lu}
还将匹配Unicode字符的大写字母。模仿这种行为是可能的,但有点笨拙。不要盲目地给出答案。实际上,有一种方法可以用C#打印出特定组的所有代码点,然后我们可以编写代码来生成替换字符组。如果密码将被散列,那么我认为这些字符很好,可能甚至比仅限于英文字母更好。不,我不知道。我知道一个实例(不确定服务器运行在什么上),该网页接受密码中的Unicode字符。我的观点是,我更喜欢让人们输入Unicode字符来扩展暴力的范围