2009-10-21 2 views
0
/^[a-d][a-d]*(?:_[a-d]+)*$/ 

입력 필드의 모든 키 누르기에서 jquery로 위의 정규 표현식을 사용하고 있습니다. 그것은 동적 업데이트를 실행하고 있기 때문에 의도 한대로 정확하게 작동합니다. 당신이하는 일을 스스로 말할 수는 있지만 여기 요점은 밑줄 _입니다. 문자 뒤에 a-d이 오는 것이므로 마지막으로 사용자가 입력 할 수 없습니다. 이것은 내 문제입니다.Jquery, keypress : 내 정규식이 잘 작동하고 있습니다. 동적 피드백이 엉망입니다.

정규식이 입력중인 (진행 중) 것에 대해 검사되기 때문에 최종 버전과 비교하여 검사하지 않습니다. 모든 키를 누를 때마다 정규 표현식의 유효성을 검사합니다. 일치하지 않으면 문제가되는 문자를 제거합니다 (즉, 사용자가 그것을 볼 수 없으며 입력 필드에 등록되지 않습니다). 즉, 사용자가 some_을 입력하면 동적 보정이 실행되고 사용자가 계속 입력하는 중에도 사용자가 계속 입력하는 경우에도 some으로 돌아갑니다.

키 누르기를 느리게 할 수있는 방법이 있습니까? 이 경우의 다른 해결책은 무엇입니까?

+0

어쩌면 대신 정규식'onblur'을 수행 할 수 있습니까? – peirix

+0

만약 내가 onblur한다면 역동적 인 수정 능력이 없을 것입니다. 그것은 내가 원하지 않는 모든 문자를 제거하는 것을 돕는 것이다. – Chris

답변

1

내가 th를 읽고 있다면 맞다면 각 문자를 화면에 표시 한 다음 onkeypress 대신 onkeyup 이벤트를 사용하려고 할 수 있습니다. 알렉스는 당신이 추가 할 것을 제안 했으므로

setTimeout (expression, timeout); 

을 호출하는 것을 지연시키기 위해, 정말로 당신이 정말로 무엇을하고 있는지에 따라 달라집니다.

0

지연 시간을 기다리는 데 타임 아웃을 사용하고 새로운 키 누르기 후에 타임 아웃을 취소 할 수는 있지만 올바른 방법은 아닙니다. 아마도 밑줄 (또는 종료 문자가없는 경우) keypress가 아니라 blur() 이벤트에서 발생합니다.

0

KeyUp을 사용하십시오. KeyPress은 방금 누른 키를 인식하지 못합니다. 오히려 이전 문자 입력을 검사합니다. KeyUp을 사용하면 방금 누른 키를 확인합니다.

필드가 완전히 채워지지 않은 경우 정규식을 사용하여 입력을 확인하는 방법을 묻습니다. 정규식은 문자열 전체를 검사하지 않습니까?

관련 문제