2012-06-11 2 views
3

У меня есть строка, и я хочу убедиться, что каждое письмо в нем - английский. Другие персонажи, мне все равно.Как предотвратить символы, отличные от английского, и разрешить не-альфа-символы

  1. 34556#%42%$23$%^*&sdfsfr - действительный
  2. 34556#%42%$23$%^*&בלה בלה - не действует

Могу ли я сделать это с помощью Linq? RegEx?

Благодаря

+4

Так "наивным" английское слово для вас? – Joey

+0

@Joey - нет, только 'az' или' AZ' – SexyMF

+0

@MitchWheat - я знаю только базовый RegEx ... – SexyMF

ответ

1

Одна вещь, вы можете попробовать это поставить символ вы хотите в этом regx

bool IsValid(string input) {  
    return !(Regex.IsMatch(@"[^A-Za-z0-9'\.&@:?!()$#^]", input)); 
} 

символ, кроме, определенное в regx струны игнорируются т.е. возвращать ложь ..

3

Возможно, вы могли бы использовать

using System.Linq; 

... 

static bool IsValid(string str) 
{ 
    return str.All(c => c <= sbyte.MaxValue); 
} 

Это рассматривает все символы ASCII как «действительные» (ev en управляющие символы). Но знаки препинания и другие специальные символы вне ASCII не являются «действительными». Если str - null, исключение выдается.

3

Вы можете определить в классе символов либо все символы/диапазоны символов/Юникод-свойства/блоки, которые вы хотите разрешить, или вы не хотите разрешать.

[abc] класс символов, который позволяет и б и

[^abc] является инвертированный символьный класс, который соответствует всем, но не или б или

Здесь в вашем случае я бы так, нет необходимости определять каждый символ:

^[\P{L}A-Za-z]*$ 

Матч с самого начала и до конца строки все, что не письмо [^\p{L}] или A-Za-z.

\p{L} Это свойство Юникод и соответствует всем, что имеет письмо о свойствах. \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"); 

    } 
} 

Некоторые более простые объяснения: регулярные выражения What absolutely every Programmer should know about regular expressions

+2

'[^\ p {L}] 'то же, что и' \ P {L} '. Затем вы можете объединить их в: '^ [\ P {L} A-Za-z] * $' – Kobi

+0

спасибо за упрощение @Kobi, включил его в мой ответ. – stema

Смежные вопросы