正则表达式允许一组字符并禁止其他字符

我想限制用户在字段中输入以下特殊字符:

 œçşÇŞ
 ğĞščřŠŘŇĚŽĎŤČňěž
 UU
 ITI
 -¿“” @ *
新队
回程

还有一些将添加到此列表中,但我最终将拥有完整的限制列表。

但除了字母数字字符,通常的特殊字符等,他还可以输入某些外国字符,如äöüÄÖÜÿï等。

有没有一种简单的方法来构建一个正则表达式来做这件事。 在不允许的列表中添加如此多的字符

 [^œçşÇŞğĞščřŠŘŇĚŽĎŤČňěž......Ůťı - ¿“”* @] +

似乎没有用。

而且我没有完整的允许字符列表。 即使我试图获得它并且包括所有字符,它将会太长:

 〜`#$%^&()[] {};'!” ,.

以及某些外国人的角色。

你没有提到你正在使用的正则表达式的“味道”。 以下工作如何?

 \A[^œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı — ¿ „ ” * @]+\z 

可以构建正则表达式以匹配不正确的字符,例如:

 [œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı] 

(我没有包括所有角色;你明白了!)。

如果任何字符匹配,则表示失败。

或者,如果您需要一个匹配有效输入的正则表达式,只需在括号前面添加一个插入符,如下所示:

 [^œçşÇŞ ğĞščřŠŘŇĚŽĎŤČňěž ůŮ İ ť ı]* 

你可以使用正则表达式,但为什么不检查你的字符串中是否有任何不允许的字符使用内置方法? 例如,在.NET世界中,您可以使用.Contains()。

就个人而言,我会创建一个允许字符列表,然后检查您的字符串是否没有列表中没有的任何字符。 使用白名单将确保您没有忘记任何“坏”字符。

还有一些将添加到此列表中,但我最终将拥有完整的限制列表。

而且我没有完整的允许字符列表(即使我试图获得它也会太长,并且会包含所有字符,如〜!#$%^&()[] {};’:“,. <>以及某些外国人的角色)

你最终会得到不允许的字符列表,可能不是允许的字符列表? 您必须具有所有允许字符的列表或所有不允许字符的列表。 否则你无法判断输入是否合法。 此外,如果您有一个列表,如果已知字符集,则隐式地具有第二个列表。 然后只执行较短的一个。

只是猜测,但如果你使用Unicode,可能会有更多的字符你想要禁止而不是允许 – 想想所有花哨的Chinees和Japanes符号。 所以我认为你应该真正建立一个允许的字符列表,并使用像az这样的范围。

如果你真的想要构建不允许的字符列表,你将需要构建一个正则表达式,如[^œçşÇŞğĞščřŠŘŇĚŽĎŤČňěž……Ůť – ¿“”* @] * 。 如果需要,请不要忘记转义字符,并尽可能使用范围。

在不允许的列表中添加如此多的字符,如[^œçşÇŞğĞščřŠŘŇĚŽĎŤČňěžůŮİťı – ¿“”* @] +似乎不起作用。

您的列表中有空格。 它们也在你的代码中吗? 我不确定,但可能这可能是一个问题。

最好通过否定允许的集来尝试匹配任何不允许的字符。 例如,如果您只想允许“a”到“z”,则可以执行以下操作。

 [^az] 

您不可能知道所有不允许的字符,但您可能知道允许的字符。 因此,构建一个类似上面的正则表达式,它只匹配一个不在允许集合中的字符。 如果你得到一个匹配,你就会知道该字符串包含一个无效字符。

如果可以,尝试使用内置字符类转义码(如果可用)。

在这里找到它们的Perl RE ,寻找“角色类和其他特殊躲避”。 它可能允许你像这样一个较短的表达。

 [^\w\d ..other individual chars.. ]