2012-08-14 2 views
0

에 변수를 삽입 I이 양식 필드가 비어있는 경우 유효 할 수 또는 "안녕하세요"라는 단어를 포함하거나 다른 유효성 검사를 통과, 잘 작동 다음 ...자바 스크립트 - 정규 표현식

var re = new RegExp(/^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/); 

하지만, 나는 "hello"라는 단어를 변수의 값으로 만들고 싶다.

나는 이것을 시도했지만 더 이상 작동하는 것 같다 없습니다 :

var i = "hello"; 
var re = new RegExp('/^$|^['+i+']|^([FG]?\d{5}|\d{5}[AB])$/'); 
+0

참고 "안녕하세요"가 아니라는 문자 H로 시작하는, 전자, l 또는 o. – moopet

+0

이것은 아마도 문제가 아니지만 정규 표현식을 문자열로 쓸 때'\\ d '와 같은 문자열을 이스케이프 처리해야합니다 (예 :'\\ d'). – apsillers

+0

당신의 regexp는 또한'hyacinth'라는 단어와 일치합니다. – DaoWen

답변

4

.

  • RegExp문자열이 아닌 첫 번째 경우에 통과 같은 문자 정규식 기대하고있다. RegExp은 충분히 똑똑하고 정규식 리터럴을 전달하고 있음을 감지합니다. 그래서 첫 번째 예는 우연에 의해 작동과 동일합니다 : 표시

    var re = /^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/; 
    
  • /는 식의 하지 일부, 그들은 훨씬 인용 부호 같은 문자 ('를) 정규식을 표시하는 구분 기호는 문자열 리터럴. 따라서 표현식을 RegExp에 문자열로 전달하면 /을 포함해서는 안됩니다.

  • 역 슬래시는 문자열에서도 이스케이프 문자이므로 표현식에 리터럴 백 슬래시를 만들려면 \\을 사용해야합니다.

  • [hello] 단어 hello 위해, 그것은 어느 h, e, l 또는 o 일치 따라서 그것은 [ehlo] 동등 테스트되지 않는다.

  • 말했다 모두와 함께

, 코드가 있어야한다 : 당신이 단어를 포함하는 문자열을 검사하지 않는

var i = "hello"; 
var re = new RegExp('^$|^'+i+'|^([FG]?\\d{5}|\\d{5}[AB])$'); 
1

드롭을 선도하고 / 문자를 후행하고 등록 특급은 당신이 무엇을 기대 않을 것입니다. \ 문자를 두 번 이스케이프 처리합니다. 또한 []은 이러한 문자 중 하나와 일치한다는 것을 의미합니다.

기본 예제 코드에서 잘못된 몇 가지가 있습니다

var str = "hello world"; 
var word = "hello" 
var re = new RegExp("^" + word + "\\s?") 
console.log(str.match(re)); 
+0

[] 건으로 좋은 지점. 나는 그 오류를 완전히 놓쳤다! – Tom