정규표현식 사용하기
From LimeSurvey Manual
정규표현식은 슬래시("/")로 시작하고 끝나야 합니다. https://www.regexlib.net/ 에서 다양한 정규표현식 라이브러리를 찾을 수 있습니다. 이러한 패턴은 슬래시로 감싸면 거의 항상 작동합니다.
정규표현식을 테스트하려면 이 정규표현식 테스터를 사용할 수 있습니다.
중요: 조건에서의 정규표현식
조건 편집기에서 정규표현식을 사용할 때는 시작과 끝의 슬래시를 포함하지 마십시오.
이메일 유효성 검사
업데이트(2018년 12월): 요즘 도메인 이름에는 “ü”와 같은 특수 문자가 포함될 수 있고 .tech 또는 .company처럼 3자를 넘는 도메인도 사용되므로, 아래 이메일 정규표현식은 입력된 이메일 주소에 “@”와 “.”이 있는지만 확인합니다.
/^.+?@.+?\..+$/
여러 줄의 긴 텍스트 필드에서 한 줄에 하나씩 주소를 유효성 검사하려면 다음을 사용하십시오.
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/
다음의 오래된 정규표현식은 도메인 이름을 3자로 제한하므로 사용 가능한 모든 도메인을 포함하지 못합니다.
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
우편번호
호주 우편번호:
/^[0-9]{4}/
브라질 우편번호
/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/
캐나다 우편번호
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
미국 우편번호
/^[0-9]{5}([- /]?[0-9]{4})?$/
우편번호가 0으로 시작하도록 하려면 다음을 사용하십시오.
/^[0-9]{5}(?:-[0-9]{4})?$/
영국 우편번호
/^[A-Z][A-Z]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
이 정규표현식은 매우 정확하지는 않으며, 더 정확한 유효성 검사는 훨씬 복잡합니다. 자세한 내용은 StackOverflow 답변과 Wikipedia를 참조하십시오.
프랑스 우편번호
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/
위 표현식은 매우 정확하며, 해외 도(DOM)와 해외 영토(TOM)(DOM-TOM)를 포함하여 프랑스 도(Department)가 존재하는지(처음 두 자리) 확인합니다.
전화번호
미국 전화번호
/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/
또는
/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/
두 번째 옵션은 다음과 같은 숫자가 아닌 기호가 포함된 캐나다 및 미국 전화번호를 모두 일치시킵니다.
. ( ) - (space)
이를 통해 다음과 같은 형태의 전화번호를 일치시킬 수 있습니다.
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
호주 전화번호
다음 패턴은 국가 번호 접두사 "+61"이 포함된 경우를 포함하여 다양한 호주 휴대폰 및 유선 전화번호를 모두 일치시킵니다.
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- +61 2 3456 789
다음은 일치하지 않습니다.
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
괄호, 공백, 하이픈은 무시됩니다.
여기에 나열된 '매우 정밀:' 버전은 번호의 처음 네 자리 또는 다섯 자리를 검사하여 유효한 호주 번호인지 확인합니다.
'덜 정밀:' 버전은 첫 번째와 두 번째 숫자만 검사하므로 유효하지 않은 번호가 허용될 수 있습니다.
모든 호주 전화번호 (휴대폰 및 유선 전화 - 지역 번호 필수)
매우 정밀:
/^\(?(?:\+?61|0)(?:(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}|4\)?[ -]?(?:(?:[01][ -]?[0-9]|2[ -]?[0-57-9]|3[ -]?[1-9]|4[ -]?[7-9]|5[ -]?[018])[ -]?[0-9]|3[ -]?0[ -]?[0-5])(?:[ -]?[0-9]){5})$/
덜 정밀:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
모든 호주 전화번호 (유선 전화만 - 지역 번호 필수)
매우 정밀:
/^\(?(?:\+?61|0)(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}$/
덜 정밀:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
뉴사우스웨일스 유선 전화번호 (지역 번호 선택)
매우 정밀:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
덜 정밀:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
빅토리아 및 태즈메이니아 유선 전화번호 (지역 번호 선택)
매우 정밀:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
정밀도가 낮은 패턴:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
퀸즐랜드 유선 전화번호 (지역 번호 선택 사항)
정밀도가 높은 패턴:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
정밀도가 낮은 패턴:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
사우스오스트레일리아, 노던 준주, 웨스턴오스트레일리아 유선 전화번호 (지역 번호 선택 사항)
정밀도가 높은 패턴:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/
정밀도가 낮은 패턴:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
호주 휴대전화 번호 전용
정밀도가 높은 패턴:
/^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$/
정밀도가 낮은 패턴:
/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/
벨기에 전화번호
/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/
벨기에 휴대전화 번호
/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/
프랑스 전화번호
/^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/
프랑스 휴대전화 번호
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
룩셈부르크 전화번호
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
룩셈부르크 휴대전화 번호
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
독일 학점 (선택적 플러스 또는 마이너스 포함)
/^[1-6]{1}[\+|\-]?$/
나이 유효성 검사
예시: 20~99세
/([2-9][0-9])/
예시: 18~35세
/(1[8-9]|2[0-9]|3[0-5])/
예시: 19~65세
/^(1[8-9]|[2-5][0-9]|6[0-5])$/
숫자 유효성 검사
1에서 99999까지의 숫자
/^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])$/
/^[1-9][0-9]{0,4}$/ does the same as above but should run a little faster
1에서 999, 1.000에서 999.999, 999.999.999까지의 숫자
/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
1에서 999, 1.000에서 999.999, 999.999.999까지의 숫자는 허용하지만 999.1.1, 94.22.22, 999.1.22, 999.11.1, 999.1.333과 같은 숫자는 허용하지 않습니다.
선택적 소수점이 있는 숫자 유효성 검사 (가격용)
0에서 199까지의 숫자를 허용하며, 소수점 이하 두 자리는 선택 사항입니다:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/
천 단위 구분 기호가 있는 숫자 유효성 검사
공백을 구분 기호로 사용, 음수 불가
/^(?!0)\d{1,3}(\ \d{3})*$/
점을 구분 기호로 사용, 음수 허용
/^-?(?!0)\d{1,3}(\.\d{3})*$/
소수점 이하 두 자리를 필수로 하며, 천/백만 단위를 구분하는 쉼표를 선택적으로 사용할 수 있는 1.00에서 999,999,999.00까지의 숫자를 허용합니다. 다음 형식이 모두 허용됩니다: 1.00, 1,000.00, 12,345.67, 12345,02, 123,456,468.00, 1234566.00, 123456789.00 하지만 1,23.00, 12,3.4 또는 1234,43.04는 허용되지 않습니다.
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
위와 유사하지만 소수점 이하 두 자리를 필수로 하며, 소수 구분 기호 "," 앞에 "0"을 허용합니다.
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
위와 같지만 소수점 이하 두 자리는 선택 사항입니다:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/
월 (1-12)
사람이 태어난 달을 묻고 싶다면 다음과 같이 입력값의 유효성을 검사할 수 있습니다.
/^[0]*[1-9]$|^[0]*1[0-2]$/
최소 너비 (이 예시에서는 3으로 설정)
/^.{3,}$/
통화
미국 통화 (달러 기호와 센트는 선택 사항)
/^\$?\d+(\.(\d{2}))?$/
쉼표 사용 여부 확인:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
스위스 가격
소수점 뒤에 두 자리 소수가 있고, 그 마지막 자리가 5 또는 0인 숫자:
/^(\d+)(\.\d(05)?)?$/
점수 유효성 검사
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
텍스트 유효성 검사
짧은 서술 여러 개 질문 유형은 현재 최소 또는 최대 응답 수를 지원하지 않습니다. 이를 우회하는 한 가지 방법은 장문 자유 서술 질문 유형에 정규표현식을 사용하는 것입니다.
아래 표현식은 줄당 단어가 최소 하나 이상이고, 줄 수가 최소 3줄 이상 최대 10줄 이하인지 검사합니다.
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is
예를 들어 줄당 다섯 단어를 원한다면, 첫 번째와 마지막 별표(*)를 {4,}로 변경하면 됩니다.
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is
줄당 하나 이상의 단어(1줄에서 5줄 사이)를 원한다면, 마지막 중괄호 안의 내용을 0,4로 변경하면 됩니다(첫 번째 줄은 이미 일치하므로 0을 사용합니다).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is
단어 수
다음은 허용되는 단어 수를 최소 1개, 최대 200개로 제한합니다.
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
최소값을 늘리려면 {0,199}의 0 부분을 변경하세요.
최대값을 늘리거나 줄이려면 {0,199}의 "199" 부분을 변경하세요.
시간 유효성 검사
시간 형식을 작성하는 방법은 여러 가지가 있습니다. 12시간제 또는 24시간제, 초 포함 또는 초 미포함 등의 옵션이 가능합니다. 날짜 질문 유형을 사용할 수도 있지만(시간도 입력받을 수 있습니다), 아래 유효성 검사 정규 표현식 중 하나와 함께 짧은 자유 서술 질문 유형을 사용할 수도 있습니다.
다음 세 가지 유효성 검사 문자열은 순서대로 초가 없는 24시간제, 초가 선택 사항인 24시간제, 초가 필수인 24시간제 시간을 검사합니다.
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/
다음 세 가지는 위와 같이 초가 없는 경우, 초가 선택 사항인 경우, 초가 필수인 경우의 12시간제 시간과 일치합니다.
/^(?">00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))$/
/^(?:00:[0-5][0-9](?::[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?::[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?::[0-5][0-9])? (?:pm|PM))$/
/^(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))$/
다음 세 가지는 위와 같이 초가 없는 경우, 초가 선택 사항인 경우, 초가 필수인 경우의 12시간제 또는 24시간제 시간과 일치합니다.
/^(?:(?:00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9])$/
/^(?:(?:00:[0-5][0-9](?[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?[0-5][0-9])? (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9](?[0-5][0-9])?)$/
/^(?:(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])$/
미국 주(State)
하나의 주를 유효성 검사하려면 다음을 사용하십시오(예시는 텍사스입니다).
- TX 대문자만:
/^(TX)$/
- tx 소문자만:
/^(tx)$/
- TX 대문자 또는 소문자:
/^([T|t][X|x])$/
욕설 필터
응답에서 욕설을 필터링하려면 다음을 사용하십시오.
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
"ENTERPROFANITYHERE"를 금지하려는 단어로 바꾸십시오.
\b를 사용하면 욕설 단어로 "ass"나 "hell"을 입력하더라도 "assassination"이나 "hello" 같은 단어는 통과됩니다. 이 방법은 다른 단어나 이름 등을 응답에서 제외하려는 경우에도 사용할 수 있습니다.
유용한 링크
이 위키 섹션의 앞부분에서 정규 표현식을 테스트하고 생성하려면 https://regex101.com/ 을 사용하시기를 권장했습니다. 첫 번째 옵션이 마음에 들지 않는 경우 https://www.regextester.com/ 에서 표현식을 생성할 수도 있습니다. 정규 표현식을 시각화하려면 https://extendsclass.com/regex-tester.html 을 사용할 수 있습니다.