繁体   English   中英

什么是匹配字母数字 6 字符单词的正则表达式,用空格或逗号分隔

[英]What is the regex to match alphanumeric 6 character words, separated by space or comma

我是 RegEx 的新手,正在尝试设计一个可以匹配以下字符串的 RegEx:

模式 1 以逗号和空格分隔: KEPM39, JEMGH5, HEPM21 ...(重复)

模式 2 仅由空格分隔: KEPM39 JEMGH5 HEPM21 ...(重复)

模式 3 仅用逗号分隔: KEPM39,JEMGH5,HEPM21 ...(重复)

这是我的概念: "^[a-zA-Z0-9]{6,}[,\s]+$"但它似乎是错误的。

#我想验证整个字符串,我使用 javascript & html 来验证用户输入。 (文本区域)

#duplicate 改为 repeat 更合适。

function validate(){
    var term = "JEPM34, KEPM11 ";
    var re = new RegExp("^[a-zA-Z0-9]{6,}[,\s]+$");
    if (re.test(term)) {
        return true
    } else {
        return false
    }
}

提前谢谢你!

一种非常宽松的验证方式可能是:

^[A-Z\d]{6}(?:[ ,]+[A-Z\d]{6})*$

请参阅在线演示 松散的意思是[,]+没有检查字符串中的每个定界符是否与每个定义相同。 因此,即使"KEPM39, JEMGH5 HEPM21, HEGD44 ZZZZZZ"也是有效的。

如果您想要一致的分隔符,并且可以有尾随空格(如示例数据中所示),您可以使用带有反向引用\1的捕获组来保持一致的分隔符并匹配末尾的可选空格。

请注意,您也可以使用\s但也可以匹配换行符。

使用test将返回 boolean,因此您不必使用 return true 或 false 但您可以返回结果 test`

^[A-Z\d]{6}(?:(, ?| )(?:[A-Z\d]{6}\1)*[A-Z\d]{6} *)?$

模式匹配:

  • ^字符串开头
  • [AZ\d]{6}匹配 6 次出现的字符 AZ 或数字
  • (?:非捕获组作为一个整体匹配
    • (, ?| )捕获组 1 ,匹配逗号和可选空格,或用作反向引用的空格
    • (?:[AZ\d]{6}\1)*可以选择重复任何列出的后跟\1到组 1 的反向引用,这将匹配相同的分隔符
    • [AZ\d]{6} *匹配最后列出的任何空格和可选空格
  • )? 关闭组并使其可选以匹配不带分隔符的实例
  • $字符串结尾

正则表达式演示

 const regex = /^[AZ\d]{6}(?:(, ?| )(?:[AZ\d]{6}\1)*[AZ\d]{6} *)?$/; const validate = term => regex.test(term); [ "KEPM39, JEMGH5, HEPM21", "KEPM39 JEMGH5 HEPM21", "KEPM39,JEMGH5,HEPM21", "JEPM34, KEPM11 ", "JEPM34, KEPM11", "JEPM34", "KEPM39, JEMGH5 HEPM21, HEGD44 ZZZZZZ", "KEPM39, JEMGH5 HEPM21" ].forEach(s => console.log(`${s} ==> ${validate(s)}`) );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM