2011-07-02 3 views
1

이 문제를 해결하는 방법에 대해 다소 혼란 스럽습니다. 표준 및 일반적으로 발생하지만 보람있는 것을 찾을 수 없습니다. HTML 텍스트 영역과 입력 용 텍스트 상자가 있습니다. 나는 다음과 같은 유효성을 검사 할 : 사용자가 텍스트 영역에 공백의 무리를 입력 할 수 없습니다해야빈 데이터가 전송되는 것을 방지하기 위해 자바 스크립트에서 공백을 확인하고 중간 공백을 자르십시오.

  1. - 그래서 15 개 문자가 최소 16 개 공백 문자 경우에만 유효한 데이터에 포함되지해야합니다. 간단한 문자 수는이를 감지하지 못합니다.
  2. 하나는 16 개의 공백과 하나의 문자를 입력 할 수 있지만 여전히 유효하지 않은 데이터입니다. 어쨌든 유효성을 확인하려면 여기를 확인하십시오 (기본적으로 아래의 요점에 따라 2 문자로 계산해야합니다)?
  3. 불필요한 공백을 제거합니다. 즉, 누군가 문자/단어를 입력하고 공백 10 개, 문자 공백 및 공백 문자 세트를 추가로 한 경우 공백 문자 1 개를 삭제해야합니다. SO에 대한 새로운 질문을 입력 할 때와 똑같습니다. 공백을 입력하면 자동으로 공백을 제거합니다. 주위를 검색해 보았지만 특정 공백에 대해서는 아무것도 찾지 않았습니다.

직관적으로 난 그냥이 자동으로 문자 카운터 기능으로 먹이를 수 추측 일 # 3에 대한 해결책을 얻을 수 있으며 정확한, 유효한 것인지?

아이디어가 있나요? jQuery를 또는 자바 스크립트는 모두 허용 :

답변

2

당신은 정규 표현식 (live example)를 통해 하나 개의 공간 이상의 공간의 모든 항목을 대체 할 수

var text = "a  b  c"; 
text = text.replace(/ +/g, ' '); 
alert(text); // "a b c" 

한 다음에 공간을 찾는 방식으로 작동합니다 전역 적으로 하나 이상의 공간으로 대체하십시오.

정규식은 공백에만 적용됩니다. 다른 공백 문자는 처리하지 않습니다. 당신은 하나 개의 공백으로 두 개 이상의 공백 문자의 모든 항목을 대체하기 원한다면, 당신은이 작업을 수행 할 수있는 다음 \s (공백) 문자 클래스를 사용

var text = "a \t\r\n b \t\r\n c"; 
text = text.replace(/\s\s+/g, ' '); 
alert(text); // "a b c" 

합니다. 대부분의 구현은 \s을 올바르게 적용했지만, 유니 코드가 정의한 좀 더 난해한 공백 문자와 관련된 버그가 있습니다. 사양에도 명확하게 처리해야한다고되어 있지만. (좋아하는 브라우저가 here을 어떻게 처리하는지 알아 내거나 here에 대한 자세한 내용을 읽어보십시오.) 가능성이 매우 낮습니다. 당신이 설명하는 유스 케이스를 염두에두면 걱정할 필요가 없을 것입니다.

+0

'구현 버그'에서 요점을 자세히 설명해 주시겠습니까? 어떤 종류의 버그가 중요하고 무엇을 검색하고 찾아야 할지를 고려하는 것이 중요하지 않다. – PhD

+0

정규식은 사용자가 제출할 수 없도록'/ [\ W] {2,}/g'이어야합니다. 15 단어가 아닌 문자 (탭 또는 개행 문자). http://jsfiddle.net/NaWJG/ –

+2

@Jim :'\ s'는 탭, 줄 바꿈, formfeeds 등을 포함합니다. 그것이 그 목적입니다. '\ W' (비 단어 문자)를 사용하면 다른 문자의 * lot *을 제거 할 수 있습니다. 예를 들어,이 주석에서 처음 문장에 정규 표현식을 적용하면 탭과 개행 문자가 포함됩니다. 단어가 아닌 문자를 사용하면 다른 문자가 많이 제거됩니다. ""나는 상상할 수없는 내용을 원합니다. :-) (또한'[\ W]'='\ W', 공백은 단어 문자가 아니기 때문에.) –

관련 문제