当前位置: 首页 > 面试题库 >

Javascript正则表达式返回true ..然后是false ..然后是true ..等等

松茂实
2023-03-14
问题内容

我在表单上编写的验证有一个奇怪的问题。这是输入旁边的“检查用户名”按钮。输入的默认值是用户名,例如’betamax’。当我按“检查用户名”时,它会通过正则表达式并将用户名发送到服务器。服务器的行为符合预期,并返回“
2”以告诉javascript他们正在提交自己的用户名。

然后,当我再次单击该按钮时,正则表达式将失败。显然没有任何内容发送到服务器,因为正则表达式已失败。如果我再次按下按钮,则正则表达式会通过,然后将用户名发送到服务器。

我实际上无法弄清楚它将使它执行此操作的原因!对我来说完全是无稽之谈!

编辑:我已经测试了Firefox和Chrome中的问题(mac)

这是我的代码:

$j("#username-search").click(checkUserName);

function checkUserName() {
    var userName = $j("#username").val();


    var invalidUserMsg = 'Invalid username (a-zA-Z0-9 _ - and not - or _ at beginning or end of string)';
    var filter = /^[^-_]([a-z0-9-_]{4,20})[^-_]$/gi;
    if (filter.test(userName)) {
        console.log("Pass")
        $j.post(
        "/account/profile/username_check/", 
        { q: userName }, 
        function(data){
            if(data == 0) {
                $j("#username-search-results").html("Error searching for username. Try again?");
            }
            else if(data == 5) {
                $j("#username-search-results").html(invalidUserMsg);
            }
            else if(data == 4) {
                $j("#username-search-results").html("Username too short or too long.");
            }
            else if(data == 2) {
                $j("#username-search-results").html("This is already your username.");
            }
            else if(data == 3) {
                $j("#username-search-results").html("This username is taken.");
            }
            else if(data == 1){
                $j("#username-search-results").html("This username is available!");
            }
        });
    } else {
        console.log("fail")
        $j("#username-search-results").html(invalidUserMsg);
    }

    return false;

}

HTML:

<input name="username" id="username" value="{{ user.username }}" />
<input type="button" value="Is it taken?" id="username-search">
<span id="username-search-results"></span>

问题答案:

/^^-_[^-_]$/gi;

您正在使用g(全局)RegExp。在JavaScript中,全局正则表达式处于状态:您第一次调用它们(使用exectest等等),您将在给定字符串中获得第一个匹配项。再次调用它们,您将得到下一个匹配项,依此类推,直到没有匹配项,它将重置为下一个字符串的开头。您也可以写regex.lastIndex= 0以重置此状态。

(这当然是绝对糟糕的设计,保证会造成混乱并引起奇怪的错误。欢迎使用JavaScript!)

可以省略g从你的RegExp,因为你只测试了一场比赛。

另外,我认为您不需要[^-_]正面和背面。那将允许在每个末端的 任何
字符,即。*plop!将是有效的。您可能正在考虑超前/向后断言,但是它们在JavaScript中不可用。(嗯,应该是超前的,但是在IE中是坏的。)建议:

/^[a-z0-9][a-z0-9_-]{2,18}[a-z0-9]$/i


 类似资料:
  • 问题内容: 使用Python正则表达式如何获得/返回?所有Python回报是: 问题答案: 对象始终为true,如果不匹配,则返回。只是测试真实性。

  • 问题内容: 这怎么可能? 这是 您会看到它应该在这里: 到底是怎么回事? 问题答案: (此答案中的代码已针对Swift 3及更高版本进行了更新。) 显然,您的变量是a (描述文件路径)。要以字符串形式获取路径,请使用属性,而不是: 以字符串格式(包括方案等)返回URL 。 例:

  • 问题内容: 我有一个发出AJAX调用的功能(通过jQuery)。在本节中,我有一个函数说: 但是,如果我这样称呼它: 第一个永远不会被调用。 如果将an 放入函数中,则为true,但在该函数返回之前不会为true 。 可以将回调函数传递给我的方法吗?喜欢: 问题答案: 是一个 回调 函数。它将由Ajax对象调用-异步!-操作完成时。您无法捕捉回调的结果,只有Ajax对象可以做到这一点。 您的函数-

  • 我有一个字符串表达式,需要从中获取一些值。字符串如下所示 从这个stribg中,我需要获取一个字符串数组列表,其中包含“example ple1”、“example ple2”等值。 我有一个Java的方法如下所示: 但<code>m。find()总是返回<code>false。我缺少什么吗?

  • 问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么

  • 无论如何,这个公式是否可以修改为返回,例如:找到单词“哇”,并将该单词返回到单元格中,而不是true/false? 谢谢。