텍스트 상자의 내용이 유효한 전자 메일 주소가 아닌 것으로 보이는 경우 사용자의 입력을 모두 억제하려고합니다. 이것은 사용자 유형을 입력하고 텍스트 상자를 떠난 후 검사가 아니며, 사용자가 입력 할 때 검사하고 텍스트가 유효하지 않은 이메일 주소로 보이면 입력을 억제합니다. 예를 들어 사용자가 'ilove.net'을 입력하면 유효한 전자 메일 주소의 첫 번째 부분으로 알려져 있습니다. (모든 항목이 지금도 정상입니다.) 사용자가 '@'를 입력하면 텍스트가 계속 OK입니다. 이메일 주소의 첫 번째 부분입니다. 그러나 사용자가 다음에 '@'를 입력하면이 두 번째 '@'이후에 사용자가 입력 한 내용에 상관없이 잘못된 전자 메일 주소로 인식되어 입력이 표시되지 않습니다.RegEx 엔진이이 정규식으로 천천히 작동합니다. 보시겠습니까?
RegEx regEx = new RegEx(@"^(?!(\d|\s|-|[.]))([^.-]*[.]?[^. -]+)[email protected]([^-. ]+[.][^-. ]+)+(?<=\D)$");
string basicSampleEmailAddress = "[email protected]";
private void textEmail_KeyPress(object sender, KeyPressEventArgs e){
string current = textBoxEmail.Text.Insert(textBoxEmail.SelectionStart,e.KeyChar.ToString());
bool matchable = false;
for(int i = basicSampleEmailAddress.Length-1; i >= 0; i--){
if(regEx.IsMatch(string.Format("{0}{1}",current,basicSampleEmailAddress.Substring(i))) { matchable=true; break;}
}
e.Handled = !matchable;
}
이 내가 textEmail (텍스트 상자)에 첫 번째 5-7 문자를 입력 할 때 확인을 작동하는 것 같다, 그러나 '느린 처리'내가 입력하면 볼 수 있습니다 : 여기
내 첫 번째 시도이다 다음 문자 및 심지어 내가 빨리 입력하면 내 응용 프로그램이 뭔가 얼어 붙어서 (나는 그것이 RegEx와 관련이 있다고 생각한다), CPU 사용률은 약 20 %이고 양식 제목에는 '응답하지 않음'이라는 텍스트가 추가됩니다. 사실, 일단 얼어 붙은 상태가되면 정상으로 만들 수 없습니다. VS Studio를 통해 응용 프로그램을 중지해야합니다.지금, 나는 또 다른 표현을 시도하고 모든 확인을 작동합니다 코드는 나는이 일에 정규 표현식으로 변경하는 것을 제외하고 위의 모든 동일합니다 의미
regEx = new Regex(@"(?i)^[0-9a-z_]{3,}((\.[0-9a-z]+)+)[email protected][a-z]+(\.[a-z0-9]+)+$");
을 문제 첫 번째 시도에서 표현식으로 인해 발생합니다. 첫 번째 표현을 할 때 왜 너무 느린지 알고 싶습니다. 내가 RegEx를 알았고 그와 사랑에 빠진 이후 RegEx는 매우 빨라졌으며 속도는 입력 문자열에 거의 달려 있다고 생각합니다. 표현에 크게 의존하지 않습니다.
도움을 주시면 대단히 감사하겠습니다.
통상 용액 : 각각의 키에 대한 타이머를 재설정 중지 입력에 타이머를 시작 , 후 800ms 타이머 화재, 그리고 그 코드를 실행 ... –
나는 타이머를 사용하고 싶지 않아, 사실 이제 내 두 번째 표현과 함께 괜찮습니다 . RegEx가 너무 느리도록 처음에는 무엇이 잘못되었는지 알고 싶습니다. 감사! –
전자 메일 정규식에주의하십시오. 올바른 정보를 얻기가 매우 어렵습니다. 예를 들어, 두 번째 정규식은'foo + bar @ buz.com'이 유효한 이메일 주소가 아니라고 잘못 말합니다. –