繁体   English   中英

正则表达式允许一个逗号,而不是在 JavaScript 中字符串的开头或结尾

[英]regex to allow one comma and not at the start or end of string in JavaScript

我不太擅长正则表达式,我需要遵循以下规则的 3 个不同的正则表达式:

  1. 我需要一个只允许字符串中有一个逗号的正则表达式
  2. 我需要一个不允许在字符串开头使用逗号但仍然只允许一个逗号的正则表达式。
  3. 我需要一个不允许在字符串末尾使用逗号但仍然只允许一个逗号的正则表达式。

对于第一条规则: 21, day可以,但21, day, 32不行。

对于第二条规则: ,21不行。

对于第三条规则: 21,不行。

到目前为止,我已经在下面创建了一个正则表达式来适应上述规则,但我想知道它是否可以分成三个不同的正则表达式来适应上述三个规则。

^[a-z0-9A-Z&.\/'_ ]+(,[a-zA-Z0-9&.\/'_ ]+)?$

任何帮助将非常感激。 谢谢

  1. 只允许一个逗号(如果您想让逗号可选,请​​在第二个逗号后面加上? ):
        ^[^,]*,[^,]*$
  1. 只允许一个逗号,但不允许在开头:
        ^[^,]+,[^,]*$
  1. 只允许一个逗号,但末尾不允许:
        ^[^,]*,[^,]+$

[^,]表示“不是逗号的字符”。

这个正则表达式应该可以完成这项工作。

^[^,]+,[^,]+$

解释:

[^,]+ -> 至少一次不是逗号

, -> 逗号(显然)

[^,]+ -> 至少一次不是逗号(再次)

  1. ^(?!.*,.*,) - 这是拒绝重复逗号的基本正则表达式。
  2. ^(?!,)(?!.*,.*,) - 相同的基数,但添加了“开头没有逗号”条件
  3. ^(?!.*,.*,).*(?:[^,]|^)$ - 相同的基数,“末尾没有逗号”。 后者被实现为交替组匹配,因为在 JavaScript 中不提供lookbehinds。

注意:所有这些模式都允许在输入中使用零个或一个逗号。 如果您只需要一个逗号,请在每个逗号前加上^(?=.*,)

简单的字符串操作可以处理这个:

 function testForComma(str) { //Comma isn't first character //Comma only exists once //Comma isn't last character return str.indexOf(',') >= 1 && str.lastIndexOf(',') == str.indexOf(',') && str.lastIndexOf(',') != str.length - 1; } console.log(testForComma(',')); console.log(testForComma(', ')); console.log(testForComma(' ,')); console.log(testForComma(' , ')); console.log(testForComma(' ,, '));

简单的表达就像 - ^[^,]+,[^,]+$

暂无
暂无

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

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