我目前正试图限制用户,因此他们只能在文本框中输入字母或数字,如果键入了除字母或数字以外的任何内容,我想删除该值。
所以我的正则表达式看起来像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]+$
但这似乎正好相反。因此,如果我输入一个数字或字母,那么它将被替换,并且它允许所有其他字符。有人可以告诉我,我在哪里出错。
答案 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]的 强>
这是否定集,它匹配任何未设置的字符(即除字母数字以外的任何字符)。