使用正規表示式
From LimeSurvey Manual
正規表示式必須以斜線("/")開頭並以斜線結尾。您可以在 https://www.regexlib.net/ 找到豐富的正規表示式庫。這些模式只要以斜線包住,幾乎都能正常運作。
若要測試您的正規表示式,可以使用此正規表示式測試工具。
重要:條件中的正規表示式
請注意,在條件編輯器中使用正規表示式時,請勿包含開頭和結尾的斜線。
電子郵件驗證
更新(2018 年 12 月):由於現今網域名稱不僅可包含像「ü」這樣的特殊字元,網域副檔名也可能超過 3 個字元,例如 .tech 或 .company,因此下方的電子郵件正規表示式只會檢查輸入的電子郵件地址中是否存在「@」和「.」。
/^.+?@.+?\..+$/
如果您想在多行長文本欄位中驗證每行一個地址:
/^(((\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-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)。
電話號碼
美國電話號碼
/^(?:\([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
括號、空白和連字號會被忽略。
此處列出的「Very precise:」(非常精確)版本會比對號碼的前四或五位數字,以確保其為有效的澳洲號碼。
「Not very precise:」(不太精確)版本僅比對第一和第二位數字,因此可能會允許無效的號碼。
所有澳洲電話號碼(手機和市話 - 必須包含區碼)
非常精確:
/^\(?(?:\+?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 的數字,小數位數(2 位)為選填:
/^([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,199} 中的「199」。
時間驗證
時間格式有多種寫法,可能的選項包括 12 小時制或 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])$/
美國各州
若要驗證單一州別,請使用以下方式(範例為德克薩斯州):
- TX 僅限大寫:
/^(TX)$/
- tx 僅限小寫:
/^(tx)$/
- TX 大寫或小寫皆可:
/^([T|t][X|x])$/
不雅詞彙篩選
若要從答案中篩選不雅詞彙:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
請將 "ENTERPROFANITYHERE" 替換為您要禁止的詞彙。
若您輸入 "ass" 或 "hell" 作為不雅詞彙,\b 可讓 "assassination" 和 "hello" 等字詞通過驗證。此方法同樣適用於禁止答案中出現其他字詞、姓名等。
實用連結
在本維基章節開頭,我們建議您使用 https://regex101.com/ 來測試/建立正規表示式。如果您不喜歡第一個選項,也可以使用 https://www.regextester.com/ 來建立表示式。您可以使用 https://extendsclass.com/regex-tester.html 將正規表示式視覺化。