限制用户输入

时间:2017-02-08 13:32:42

标签: jquery regex

我目前正试图限制用户,因此他们只能在文本框中输入字母或数字,如果键入了除字母或数字以外的任何内容,我想删除该值。

所以我的正则表达式看起来像net stop mssql$sqlexpress net start mssql$sqlexpress /mSQLCMD sqlcmd -S (local)\sqlexpress -Q "if not exists(select * from sys.server_principals where name='BUILTIN\administrators') CREATE LOGIN [BUILTIN\administrators] FROM WINDOWS;EXEC master..sp_addsrvrolemember @loginame = N'BUILTIN\administrators', @rolename = N'sysadmin'" net stop mssql$sqlexpress net start mssql$sqlexpress sqlcmd -S (local)\sqlexpress -Q "if exists( select * from fn_my_permissions(NULL, 'SERVER') where permission_name = 'CONTROL SERVER') print 'You are a sysadmin.'" ,整个jQuery函数如下所示:

^[a-zA-Z0-9]+$

但这似乎正好相反。因此,如果我输入一个数字或字母,那么它将被替换,并且它允许所有其他字符。有人可以告诉我,我在哪里出错。

4 个答案:

答案 0 :(得分:3)

你的正则表达式目前是这样的:

^[a-zA-Z0-9]+$

打破它,匹配字符串的开头,然后尽可能多的字母数字字符,然后是字符串的结尾。

您实际想要匹配的是任何非字母数字字符,并且您并不关心字符串的开头或结尾。

因此,评论中建议的正则表达式是正确的:

[^a-zA-Z0-9]

这匹配任何非字母数字字符。

您必须在两者测试和替换行中更改此设置。此外,有人可以右键单击并粘贴到文本框中,因此这不是万无一失(有人也可以禁用JavaScript)。

答案 1 :(得分:0)

如果您将这两个位置的正则表达式更改为[^a-zA-Z0-9],则可以解决问题。基本上你的正则表达式几乎总是正确的,即使它是假的,它也是真的,因为其他东西否定它是真的。我添加了一个示例代码示例。我也用控制台来证明它。

 $("#myInputField").keyup(function (e) {
   console.log(/[^a-zA-Z0-9]+$/.test(this.value));
    if (/[^a-zA-Z0-9]+$/.test(this.value)) {
        this.value = this.value.replace(/[^a-zA-Z0-9]+$/, '');
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="myInputField"/>

**在发布此帖时,有一个答案。他们有更好的措辞。我只是提供了一个我工作过的例子。

答案 2 :(得分:0)

如前所述,使用/[^a-zA-Z0-9]+$/查找任何不符合字母或数字的字符串。

请注意String.replace函数返回带替换的字符串。调用String.replace上的字符串未调整。

$("#myInputField").keyup(function (e) {
   if (/[^a-zA-Z0-9]+$/.test(this.value)) {
       this.value = this.value.replace(/[^a-zA-Z0-9]/g, '');
   }
});

@Cayce K感谢您指出应删除其他符号:)

答案 3 :(得分:0)

您可以在两个地方使用以下正则表达式(在您的条件和替换声明中)

<强> [^ \ d \ w]的

这是否定集,它匹配任何未设置的字符(即除字母数字以外的任何字符)。