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

时间:2017-01-17 22:22:16

标签: javascript regex

我正在尝试将表单数据(用户名)粘贴到网址。在网站上,用户名可以包含字母,数字,空格,连字符,下划线和句点。

我正在尝试创建一个允许这些字符的javascript正则表达式,但只包含那些字符。

我到目前为止所允许的内容,例如:

用户名

但它也允许,用户名&

我搜索了许多stackover流量帖子,但还没有解决这个问题。非常感谢你的建议。这就是我的......

<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 个答案:

答案 0 :(得分:3)

就正则表达式而言,你需要用^$来锚定它以使其意味着“整个事物”并避免部分数学运算,你的空间也在字符类之外,并且应该< EM>在。此外,即使在角色类中,我们也可以使用\w+获得“字母/数字/下划线”。最后,我们可以使用i标志来担心大写字母:

/^[\w\s.-]+$/i

https://regex101.com/r/47l22K/1

答案 1 :(得分:1)

你的正则表达式应该是:

/^[ 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 

您可以将A-Za-z0-9_替换为\w
而你的If stament应检查反面:

if(!regexp1.test...

在功能结束时,最好做到这一点

return true;

我建议你查看JQuery以获得更高级,更简单的Javascript代码 希望这个帮助

答案 2 :(得分:0)

你的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()">