96

特定の文字列に特殊文字が存在するかどうかを確認する単純な正規表現を書きたいと思います。私の正規表現は機能しますが、すべての数値も含まれている理由がわからないため、数値を入力するとエラーが返されます。

私のコード:

//pattern to find if there is any special character in string
Pattern regex = Pattern.compile("[$&+,:;=?@#|'<>.-^*()%!]");
//matcher to find if there is any special character in string
Matcher matcher = regex.matcher(searchQuery.getSearchFor());

if(matcher.find())
{
    errors.rejectValue("searchFor", "wrong_pattern.SearchQuery.searchForSpecialCharacters","Special characters are not allowed!");
}
4

19 に答える 19

221

そうしないでください...BABY ANGELこのような小さな Unicode は死につつあります! ◕◡◕ (←これらは画像ではありません) (矢印でもありません!)

☺</h1>

そして、あなたは20年間のDOSを殺しています:-)(最後のスマイリーは呼ばれWHITE SMILING FACEています...今は263A...ですが、古代にはそうでしたALT-1

と彼の友人

☻</h1>

BLACK SMILING FACE...今は263B...ですが、昔はそうでしたALT-2

否定的な一致を試してください:

Pattern regex = Pattern.compile("[^A-Za-z0-9]");

(これは、A-Z「標準」の文字と「標準」0-9の数字のみを受け入れます。)

于 2013-08-05T12:23:48.013 に答える
38

文字クラスの途中にダッシュがあり、これは文字範囲を意味します。次のようにクラスの最後にダッシュを置きます。

[$&+,:;=?@#|'<>.^*()%!-]
于 2013-08-05T12:22:02.247 に答える
27

これは、以下に示すように、数字と他のいくつかの文字を含むと.-^の間のすべての文字である がパターンに含まれているためです。.^

ここに画像の説明を入力

特殊文字の場合、句読点と記号の使用を意味します。

[\p{P}\p{S}]

すべての Unicode句読点と記号が含まれています。

于 2013-08-05T12:31:34.717 に答える
21

文字クラスに空白とアンダースコアがないため、次の正規表現の方が適していると思います。

Pattern regex = Pattern.compile("[^\w\s]");

これは、以下以外のすべてに一致することを意味します[A-Za-z0-9\s_]

Unicode バージョン:

Pattern regex = Pattern.compile("[^\p{L}\d\s_]");
于 2013-08-05T12:27:07.900 に答える
7

これを使用して、 を除く一般的な特殊文字をキャッチし.-_ます。

/[!"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+/

.-_同様に含めたい場合は、これを使用します。

/[-._!"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+/

URL フレンドリーで、特殊文字やスペースを含まない文字列をフィルタリングする場合は、次のようにします。

/^[^ !"`'#%&,:;<>=@{}~\$\(\)\*\+\/\\\?\[\]\^\|]+$/

のようなパターンを使用する/[^A-Za-z0-9]/と、他の言語のような特殊なアルファベットやヨーロッパのアクセント付きアルファベット (é、í など) を検出し始めます。

于 2021-03-02T08:13:06.750 に答える
4

試す:

(?i)^([[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]*)$

(?i)^(A)$: 正規表現Aで大文字と小文字が区別されないことを示します。

[a-z]a: からまでの任意の英字を表しますz

[^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]: 、数字、および特殊文字 (アクセント付き文字)aを除く任意の英字を表します。z

[[a-z][^a-z0-9\\s\\(\\)\\[\\]\\{\\}\\\\^\\$\\|\\?\\*\\+\\.\\<\\>\\-\\=\\!\\_]]: アルファベット (アクセント付きまたはアクセントなし) のみの文字を表します。

*: 先行する正規表現の 1 つ以上の出現。

于 2016-02-17T11:26:54.303 に答える
4

この正規表現パターン ("^[a-zA-Z0-9]*$") を使用します。特殊文字を除く英数字文字列を検証します

于 2016-07-04T06:41:26.233 に答える
3

これを同じものに使用してみてください-StringUtils.isAlphanumeric(value)

于 2016-12-07T23:52:56.850 に答える
3

これは、次のように Pattern と Matcher を使用して実現できます。

Pattern pattern = Pattern.compile("[^A-Za-z0-9 ]");
Matcher matcher = pattern.matcher(trString);
boolean hasSpecialChars = matcher.find();
于 2018-09-20T12:18:17.923 に答える
2

否定一致を使用できます。

Pattern regex = Pattern.compile("([a-zA-Z0-9])*"); (0 文字以上の場合)

また

Pattern regex = Pattern.compile("([a-zA-Z0-9])+"); (1 文字以上)

于 2020-01-08T05:50:35.903 に答える
1

任意の数の特殊文字を検索するには、次の正規表現パターンを使用します: ([^(A-Za-z0-9 )]{1,})

[^(A-Za-z0-9 )] これは、アルファベット、数字、およびスペースを除くすべての文字を意味します。{1,0} これは、前のブロックの 1 つ以上の文字を意味します。

于 2020-10-05T12:01:24.407 に答える
0

(^\W$)

^ - 文字列の先頭、\W - 単語以外の任意の文字に一致 [^a-zA-Z0-9_]、$ - 文字列の末尾

于 2016-08-26T09:18:37.723 に答える