簡體   English   中英

由逗號分隔的正則表達式重復模式

[英]Regular Expression Repeating Pattern delimited by comma

我在Javascript中有以下正則表達式:

/\w{1,}\s*\w{1,}/  

這將檢查字符串是否至少包含兩個大於1個字符的單詞。

EX-

asd fgh - Valid  
a b d dfd - Valid  
xscxs - Invalid

我現在有一個新的要求,我試圖實現,但不能正確。

新要求:能夠使用與以前相同類型的輸入的逗號分隔列表。 不能以逗號結尾。 根據上述規則,每個項目必須有效。
如果沒有逗號,那么它也是有效的。
此外,所有字符都是字母,沒有數字/特殊字符

Valid:  HOH vfdffd,dsfds dfgd,UIU fgfd  
Valid:  JOI JOIO  
Invalid:  QASW fgdfg,  
Invalid:  sdfds,1234 dfgdfg  
Invalid:  JKJ,ABCD  

您可以將第一個要求的模式指定為[a-zA-Z]+(?:\\s[A-Za-z]+)+以匹配1+個字母字符,然后匹配1 +個空格+ 1個序列或更多單詞字符,然后用逗號重復另一組內的模式:

/^[a-z]+(?:\s[a-z]+)+(?:,[a-z]+(?:\s[a-z]+)+)*$/i

請參閱正則表達式演示 (因為輸入是一個多行字符串,所有\\s替換為演示中的空格)。

如果允許多個空格,請用\\s+替換\\s

細節

  • ^ - 字符串的開頭
  • [az]+ - 1+字母
  • (?:\\s[az]+)+ - 1個或更多序列(即空間是強制性的)
    • \\s - 一個空格(添加+以匹配一個或多個發生)
    • [az]+ - 1+個字母
  • (?:,[az]+(?:\\s[az]+)+)* - 零個或多個序列(即逗號是可選的)
    • , - 一個逗號
    • (?:\\s[az]+)+ - 見上文
  • $ - 結束字符串。
.regex(/^(?:(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4})(?:(?:\b\,)(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4})*$/)

Explanation:

(?:\b\,) -> Match with a , at the beginning of the string only if its preceded by a word boundary
(?:(?![0-9]{4}|[a-zA-Z]{4})[a-zA-Z0-9]{4}) -> Match a string with letter and digits only if dont have 4 digits ow 4 letters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM