2012-06-11 6 views
3

문자열이 있는데, 문자이 모두 영어로되어 있는지 확인하고 싶습니다. 다른 문자는 상관 없습니다.영어 이외의 문자를 방지하고 비 알파 문자를 허용하는 방법

  1. 34556#%42%$23$%^*&sdfsfr은 - 유효
  2. 34556#%42%$23$%^*&בלה בלה은 -

나는 Linq에와 있다고 할 수 유효하지? RegEx?

감사

시도 할 수있는 일이 REGX 문자열에 specfied보다

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

문자 다른이 REGX에서 원하는 문자를 넣어

+4

그래서이다 "순진한"영어 단어? – Joey

+0

@Joey - no, 단지'az' 또는'AZ' – SexyMF

+0

@MitchWheat - 기본 RegEx 만 알고 있습니다 ... – SexyMF

답변

1

하나는 .. false를 돌려 즉 무시 얻을하는

3

사용 가능할 수도 있습니다

using System.Linq; 

... 

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

이렇게하면 모든 ASCII 문자가 "유효"하다고 간주됩니다 (ev 제어 문자). 그러나 구두점 및 ASCII 외부의 다른 특수 문자는 "유효하지 않습니다". strnull이면 예외가 발생합니다.

3

허용하거나 허용하지 않으려는 모든 문자/문자 범위/유니 코드 속성/블록을 문자 클래스에 정의 할 수 있습니다.

[abc]

[^abc]가 부정 문자 모든하지만 A 또는 B하지 일치하는 클래스 또는 c 나는이 길을 갈 것입니다 귀하의 경우 여기에

있는 문자 a와 b 수 있습니다 클래스와 C이다 편지 [^\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

당신의 단순화를 위해 고비 @ 코비, 내 대답에 포함되어 있습니다. – stema

관련 문제