2011-08-11 3 views
0

이름을 입력 할 때 약간의 양식 유효성 검사를 만들려고합니다. 특정 문자, 이미 생성 된 이름 및 내부 예약어를 허용하지 않습니다. 문제는 내가 "pos"와 일치하고 실패한 이름에 "posts"를 넣고 싶을 때입니다.자바 스크립트에서 오류가있는 경우에만 전체 단어를 일치 시키려합니다.

if (filterName.match("\\b"+badchar[char]+"\\b")) 

\b에 대한

var badchar = new Array('"', "," , "'" , "#", "&", "!", "@", "$", "+", ";", ":", "*", "(",")", "[","]","{","}", "/", "="); 
    var resword = new Array("positive","pos","negative","neg","neutral", "neu","twitter","itunes","facebook","android","forums","RSS Feeds"); 

    var existingNames = @anames; 
    var valueLen = $("#aname").val().length; 
    var fail=false; 

    var filterElem = $('#aname'); 
    var filterName = $('#aname').val(); 

    $.each(badchar, function(char){ 
     if (filterName.indexOf(badchar[char]) != -1) { 
      console.log("bad character") 
      filterElem.css('border','2px solid red'); 
      window.alert("You can not include '" + badchar[char] + "' in your Filter Name"); 
      fail = true; 
     } 
    }); 

    $.each(resword,function(){ 
     if (filterName.match(this)) { 
       console.log("bad word"); 
       filterElem.css('border','2px solid red'); 
       window.alert("You can not include '" + this + "' in your Filter Name"); 
       fail = true; 
      } 
    }); 
+0

양식의 컨텍스트와 유효성 검사를 사용하는 특정 입력은 무엇입니까? – RobB

답변

4

시도 - 이것에 대한

if (filterName.match(this)) { 

-

var re = new RegExp("\\b" + this + "\\b","g"); 
if (filterName.match(re)) { 

이 나쁜 단어를 기반으로 동적 정규식을 구축하고 전체 단어 인 경우에만 단어와 일치해야합니다.

1

스왑

if (filterName.indexOf(badchar[char]) != -1) 

은 당신이 디자인이 어떻게 당신의 코드를 기반으로 단어 경계

+0

'\ b'을 (를) 사용 하시겠습니까? '\ w'는 단어 문자에 대한 정규 표현식입니다. – numbers1311407

+0

죄송합니다 - 맞습니다 –

0

일치를위한 정규식입니다. 무엇을 성취하려고합니까? 예약 된 단어 목록에있는 단어가 자기가 아니면 입력 한 내용의 일부에 존재할 때만 단어를 허용 하시겠습니까? 이전의 경우 의도하지 않은 항목 (예 : "posts"는 "pos"와 일치 함)과 일치하므로 indexOf를 사용하지 않으려합니다. 입력 한 내용에 예약어를 전혀 사용하지 않으려면 디자인을 재고해야합니다. 입력 된 내용의 어떤 부분에서 "pos"를 허용하지 않으면 매우 엄격합니다. 이 줄을 교환

0

이 질문을 헤더에 입력하는 방식과 약간 다른 질문을 할 수 있습니다. 내가 찾고있는 것에 대해 아무 것도 발견하지 못했고 따라서이 질문에 부딪히는 다른 누구라도 내 대답을 찾을 수 있도록 머리말에 질문 된 질문에 대해이를 해결했습니다.

전체 단어 만 검색하고 찾습니다. 부분적으로 일치해야합니다. 3 그룹을 반환합니다. 이전 문자, 단어 및 문자 뒤. 때때로 전후의 성격은 아무 것도 아닐 것입니다.

JS 바이올린 예 : 그것은 검출 또는 대부분의 경우에 교체하기위한 매우 잘 작동 http://jsfiddle.net/g8ns3/

var e = new RegExp('(\b|^|[^A-Za-z])(Word)(\b|$|[^A-Za-z])', 'gi'); 
var text1 = 'Example word. Even when word, is next to a symbol.Word'; 
var text2 = 'Word Example'; 
var text3 = 'Example Word'; 
var text4 = 'word'; 

if (text1.match(e)) 
    console.log('Found Match Inside 1'); 

if (text2.match(e)) 
    console.log('Found Match Inside 2'); 

if (text3.match(e)) 
    console.log('Found Match Inside 3'); 

if (text4.match(e)) 
    console.log('Found Match Inside 4'); 

console.log(text1.replace(e, '($1)($2)($3)')); 
console.log(text2.replace(e, '($1)($2)($3)')); 
console.log(text3.replace(e, '($1)($2)($3)')); 
console.log(text4.replace(e, '($1)($2)($3)')); 

. HTML + 텍스트를 바꾸면 원하는 단어가있는 태그 또는 태그 속성이있는 경우 태그 또는 태그 속성을 바꾸는 것과 같은 예기치 않은 결과가 발생할 수 있습니다.

관련 문제