关于jquery:检查字符串是否包含除以外的任何内容

Check if string contains anything other than

我有一个输入字段要验证和限制输入的字符。

如果字段包含以下内容以外的任何内容,如何显示错误?

1
2
3
4
a-z
A-Z
0 to 9
!$%&*:;#~@

我试过用

1
If (/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!$%&*:;#~@])[\da-zA-Z!$%&*:;#~@]$/.test(userin) === false) then alert 'xxxx';

但这似乎行不通。有什么想法吗?

谢谢


引用我的注释,您可以使用以下任意一种方法捕获不在您提供的列表中的任何字符。

1
2
3
4
a-z
A-Z
0 to 9
!$%&*:;#~@

1
[^a-zA-Z0-9!$%&*:;#~@]

单击此处查看它的实际操作。我做了一些键盘粉碎,如你所见,它抓住了列表中没有找到的字符。

如果您想向用户展示上面用(regex here)包围的regex的错误,并且如果您的匹配大于0,则拒绝该条目。

根据在regex101上生成的代码(在提供的外部链接中),可以使用以下代码对其进行测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const regex = /([^a-zA-Z0-9!$%&*:;#~@])/g;
const str = `afdskljfalsfhaljsf jdsalfhajslfjdsf haskjlfjdskfa sdfl;dasj fas kjdfs2345tg!@*%(&)&^%\$@#@!!\$%^&%(\$%\$##@\$@>?"{P}P@#!é45049sgfg~~~\`\`\`j;fad;fadsfafds
{":

    fd
:"L'KM"JNH¨MJ'KJ¨HN'GFDMG`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }

    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

在上面的代码中,在最后一个forEach块中捕获任何匹配项,并将其输出到控制台。您可以使用if语句,而不是在发生匹配时输出错误。看一看字符串是否匹配regex,这是一篇解释如何测试匹配的文章。

Use regex.test() if all you want is a boolean result:

1
2
3
4
5
/^([a-z0-9]{5,})$/.test('abc1');   // false

/^([a-z0-9]{5,})$/.test('abc12');   // true

/^([a-z0-9]{5,})$/.test('abc123');   // true

...and you could remove the () from your regexp since you've no need
for a capture.