文字列があり、その中のすべての文字が英語であることを確認したいと考えています。他のキャラ、気にしない。
34556#%42%$23$%^*&sdfsfr
- 有効34556#%42%$23$%^*&בלה בלה
- 有効ではありません
Linqでそれを行うことはできますか? 正規表現?
ありがとう
文字クラスで、許可するすべての文字/文字範囲/Unicode プロパティ/ブロックを定義するか、許可しないように定義できます。
[abc]
a と b と c を許可する文字クラスです
[^abc]
a、b、c 以外のすべてに一致する否定文字クラスです。
ここであなたの場合、私はこのように行きます。すべての文字を定義する必要はありません:
^[\P{L}A-Za-z]*$
文字列の最初から最後まで、文字[^\p{L}]
または以外のすべてに一致しA-Za-z
ます。
\p{L}
Unicode プロパティであり、プロパティ文字を持つすべてのものに一致します。\P{L}
は否定版で、文字ではないすべてのものです。
テストコード:
string[] StrInputNumber = { "34556#%42%$23$%^*&sdfsfr", "asdf!\"§$%&/()=?*+~#'", "34556#%42%$23$%^*&בלה בלה", "öäü!\"§$%&/()=?*+~#'" };
Regex ASCIILettersOnly = new Regex(@"^[\P{L}A-Za-z]*$");
foreach (String item in StrInputNumber) {
if (ASCIILettersOnly.IsMatch(item)) {
Console.WriteLine(item + " ==> Contains only ASCII letters");
}
else {
Console.WriteLine(item + " ==> Contains non ASCII letters");
}
}
より基本的な正規表現の説明:絶対にすべてのプログラマーが正規表現について知っておくべきこと
多分あなたは使うことができます
using System.Linq;
...
static bool IsValid(string str)
{
return str.All(c => c <= sbyte.MaxValue);
}
これにより、すべての ASCII 文字が「有効」であると見なされます (制御文字も含む)。ただし、ASCII 以外の句読点やその他の特殊文字は「有効」ではありません。の場合、例外がスローされますstr
。null
あなたが試すことができることの1つは、このregxに必要な文字を入れることです
bool IsValid(string input) {
return !(Regex.IsMatch(@"[^A-Za-z0-9'\.&@:?!()$#^]", input));
}
regx 文字列で指定された以外の文字は無視されます。つまり、false が返されます。