2013-06-27 5 views
0

허용 된 문자가 포함 된 characters 문자열이 있습니다. characters의 값만있는 경우 다른 문자열 (input)을 확인하고 싶습니다.Javascript : 문자열에 다른 문자열의 값만있는 지 확인하려면 regex를 사용하십시오.

가능한 경우 입력란에 문자가 허용되는지 여부를 확인하기 위해 regexmatch()을 사용하는 해결책을 찾고 있습니다.

function validStringUnsanitized(allowed, str) { 
    var re = new RegExp("^[" + allowed + "]+$"); 
    return re.test(str); 
} 

> validStringUnsanitized('abx', 'abx'); 
true 
> validStringUnsanitized('abx', 'ght'); 
true 

을하지만 특수 문자를 허용하려면, 당신은 허용 하나를 소독해야합니다

답변

1

JS fiddle

이 갈 줄. 테스트 문자열에 허용 된 문자 만 들어 있으면 성공할 것입니다. 대소 문자를 구분합니다.

var allowedCharacters = "abcdefghijklmnopqrstuvwxyz"; 
var regex = new RegExp("^[" + allowedCharacters + "]*$"); 
var testString = "abc#@#"; 
var success = regex.test(testString); 

대소 문자를 구분하면 해당 줄을 아래로 바꾸십시오. 이것은 regex 수식자를 추가합니다.

var regex = new RegExp("^[" + allowedCharacters + "]*$", "i"); 

allowedCharacters 변수에 특수 문자가 있으면 이중 슬래시로 이스케이프해야합니다. 따라서 대괄호 문자를 허용하려면 반드시 사용해야합니다. 첫 번째 백 슬래시는 문자열 회피 용이고 두 번째는 정규식에서 그것을 탈출을 확인하는 것입니다 때문에

var allowedCharacters = "abc\\["; 

이다.

+1

여기서 특수 문자를주의해야합니다 (예 :'allowed = "ab-x"') – georg

+0

올바른 설명을 위해 업데이트하겠습니다. – Ally

+0

모르겠지만 나에게는 효과가없는 것 같습니다. 허용되는 문자는'abcdefghijklmnopqrstuvwxyz'이지만'testString'이'abC# @ # '이면 true를 반환합니다. :(무엇이 잘못 되었나요? – gen

2

당신은 문자열에서 정규 표현식을 만들 수 RegExp 생성자를 사용할 수 있습니다. 그렇지 않으면 원치 않는 결과를 얻을 :

// the regex becomes [ab-x] which is from a to x 
> validStringUnsanitized('ab-x', 'ghai'); 
true 
> validStringUnsanitized(']ab', 'ab'); 
false 

그래서이 같은 일부 문자를 탈출해야 :

function validString(allowed, str) { 
    var sanitized = allowed.replace(/([\]\-\\])/g, '\\$1') 
    var re = new RegExp("^[" + sanitized + "]+$"); 
    return re.test(str); 
} 

> validString(']ab-x\\[', 'abxaabbx'); 
true 
> validString(']ab-x\\[', 'ab-\\xb[]ab'); 
true 
> validString(']ab-x\\[', 'ghai'); 
false 

JSFiddle

+0

가 @Ally에 내 의견을 참조 – georg

+0

당신 말이 맞아요. 문제를 보여줄 수있는 몇 가지 예제를 추가했습니다. – ahilsend

0

당신은 정규식을 사용하지 않도록하려면이 기능을 경우

http://jsfiddle.net/SXeTJ/

var allowed = 'abcdef'; 

function CheckAllowedWithRegex(str,allowed){ 
    var pattern = new RegExp("[^"+allowed+"]"); 
    return str.match(pattern) == null; 
} 

var str1 = 'aaabcc'; 
var str2 = 'aavbllkwqxx'; 

alert( CheckAllowedWithRegex(str1,allowed)); // output is true 

alert( CheckAllowedWithRegex(str2,allowed)); // output is false 
1

와 함께, 당신은 같은 것을 고려할 수 있음을 수행 할 수 있습니다

var valid_chars = ['a', 'e', 'i', 'o', 'u', 'y'], 
    ret; 

//or valid_chars = string.split(''); 

ret = isValid('test', valid_chars); //false 
ret = isValid('aeyaa', valid_chars); //true 
ret = isValid('aeyaab', valid_chars); //false 

function isValid(input, check) 
{ 
    if (typeof input === 'string') 
     input = input.split(''); 

    if (typeof check === 'string') 
     check = input.split(''); 

    if (typeof input !== 'object') 
    { 
     console.log('isValid() failed: input not array'); 
     return; 
    } 

    if (typeof check !== 'object') 
    { 
     console.log('isValid() failed: check not array'); 
     return; 
    } 


    for (var x = 0; x < input.length; ++x) 
    { 
     var char_isvalid = false; 

     for (var y = 0; y < check.length; ++y) 
     { 
      if (input[x].toLowerCase() === check[y].toLowerCase()) 
      { 
       char_isvalid = true; 
       break; 
      } 
     } 

     if (! char_isvalid) 
     { 
      return false; 
     } 
    } 

    return true; 
} 
관련 문제