我正在尝试将表单数据(用户名)粘贴到网址。在网站上,用户名可以包含字母,数字,空格,连字符,下划线和句点。
我正在尝试创建一个允许这些字符的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>
答案 0 :(得分:3)
就正则表达式而言,你需要用^
和$
来锚定它以使其意味着“整个事物”并避免部分数学运算,你的空间也在字符类之外,并且应该< EM>在。此外,即使在角色类中,我们也可以使用\w+
获得“字母/数字/下划线”。最后,我们可以使用i
标志来担心大写字母:
/^[\w\s.-]+$/i
答案 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()">