JavaScript正则表达式允许字母、数字、句点、连字符、下划线和空格。

4
我正在尝试将表单数据(用户名)附加到URL上。在该网站上,用户名可以由字母、数字、空格、连字符、下划线和句点组成。
我正在尝试创建一个JavaScript正则表达式,允许使用这些字符,但仅限于这些字符。
到目前为止,我的代码将允许例如:“User Name”的输入。
但它也会允许“User Name&”等输入。
我已经搜索了很多Stack Overflow文章,但还没有解决这个问题。非常感谢您的建议。以下是我的代码:
<script>
  function process() {
    var regexp1=new RegExp("[^[0-9A-Za-z_.-]+$]");


    var url = "http://www.website.com/page.php?data=" + document.getElementById("url").value;

    if (regexp1.test(document.getElementById("url").value)) {
      alert("Only numbers, letters, hypens, periods, spaces and underscores are allowed");
      return false;
    }
    location.href = url;
    return false;
  }
</script>

<form onSubmit="return process();">
  <br>
  <input type="text" size="10" maxlength="30" name="url" id="url">
  <input type="submit" value="go">
</form>
3个回答

5

你的if语句反了。你应该检查正则表达式不匹配的情况:

!regexp1.test(document.getElementById("url").value)

我认为原始的正则表达式是错误/不准确的,请尝试使用下面显示的正则表达式:

function process() {
    var regexp1=new RegExp("^[0-9A-Za-z_.-]+$");

    var url = "http://www.website.com/page.php?data=" + document.getElementById("url").value;

    if (!regexp1.test(document.getElementById("url").value)) {
        console.log("Only numbers, letters, hypens, periods, spaces and underscores are allowed");
    } else {
        console.log("Passed validation.");
    }
}
<input type="text" size="10" maxlength="30" name="url" id="url">
<input type="button" onclick="process()">


感谢GantTheWanderer。我尝试了使用上述建议的正则表达式,改用!regexp1.test,并列举了以下结果:(/^[\w\s.-]+$/i.。URL未加载)和(/^[ A-Za-z0-9_-.\s]*$/i。即使只使用字母、数字和空格,也触发了警报消息。 - ryansd
我添加了一个可工作的代码示例,这样你就可以与自己的代码进行比较。 - GantTheWanderer
只需复制我的正则表达式并反转if语句,你就可以顺利进行了。 - GantTheWanderer
谢谢@GantTheWanderer。我已经让它工作了,非常感谢你的帮助。 - ryansd
没有问题,我强烈推荐使用这个免费的程序来熟悉正则表达式。它是一个易于使用的工具,可以将正则表达式与其他字符串进行测试,并将其分解为逻辑部分,以帮助您了解不准确和错误的地方。http://www.ultrapico.com/expresso.htm - GantTheWanderer
显示剩余2条评论

5
你的正则表达式应该是:
/^[ A-Za-z0-9_-.\s]*$/i

说明:
^   : Begging of string 
A-Z : Uppercase Characters 
a-z : Lowercase Characters 
0-9 : Numbers 
_-. : Special Characters  you requested
\s  : Spaces 
*   : Allow repeat
$   : End of string 
/i  : Case insensitive 

你可以用\w替换A-Za-z0-9_
而你的if语句应该检查相反的情况:
if(!regexp1.test...

在函数的结尾最好加上

return true;

我建议您查看 JQuery,以获取更高级、更易于理解的 Javascript 代码。
希望这能帮到您。

谢谢MeNotMe。我尝试更改正则表达式,然后更改正则表达式以及更改“if”语句和函数末尾为“true”。在所有情况下,URL都没有加载。当尝试使用特殊字符时,我也没有收到警报消息。 - ryansd
/^[ A-Za-z0-9_-.\s]*$/i 最后一个破折号被处理为从...到的。 - Jeffrey Nicholson Carré

4
关于正则表达式,你需要使用 ^$ 锚点来表示“整个匹配”,避免部分匹配。此外,你的空格应该在字符类内。另外,我们可以使用 \w+ 来获取“字母/数字/下划线”,即使在字符类内也是如此。最后,我们可以使用 i 标志来不用担心大小写: /^[\w\s.-]+$/i https://regex101.com/r/47l22K/1

谢谢sweaver2112。我尝试更改正则表达式,但URL没有加载。当我尝试使用特殊字符时,也没有收到警报消息。 - ryansd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接