正则表达式允许数字和数字但只允许一个逗号

时间:2017-04-07 15:48:23

标签: javascript regex

我有一个任务,用户应该能够编辑地址字段的第一行,但是他们应该只能使用一个逗号,但可以将该逗号放在字符串中的任何位置。

我想知道是否有办法在JavaScript中完成此操作?

到目前为止,我已尝试过:

^[a-zA-Z0-9\&\-\,\.\/\'_ ]+$

但是这个正则表达式允许我输入多个逗号。

所以我希望正则表达式允许用户这样做:

21,Tash Place N13 2IJ

或者: ,Tash Place 21 N13 2IJ

但不是这样:

21,Tash Place,N13,2IJ

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以使用

/^[-a-zA-Z0-9&.\/'_ ]*(?:,[-a-zA-Z0-9&.\/'_ ]*)?$/

请参阅regex demo

在这里,

  • ^ - 匹配字符串的开头
  • [-a-zA-Z0-9&.\/'_ ]* - 匹配0 +字母,数字或-./'_符号,然后
  • (?:,[-a-zA-Z0-9&.\/'_ ]*)? - 可选序列(1或0次出现):
    • , - 一个逗号(因此,只允许一个)
    • [-a-zA-Z0-9&.\/'_ ]* - 匹配0 +字母,数字或-./'_符号,然后
  • $ - 字符串结束。

另一种方法是向正则表达式添加(?!(?:[^,]*,){2})否定前瞻:

/^(?!(?:[^,]*,){2})[-a-zA-Z0-9&.\/',_ ]+$/
  ^^^^^^^^^^^^^^^^^

请参阅another regex demo

如果除了(?!(?:[^,]*,){2})之外有2个0 +字符序列,然后字符串中有,,前瞻将使匹配失败。