Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 连字符和下划线不能是连续的,但可以多次出现在字符串中_Javascript_Regex_Special Characters_Regex Negation - Fatal编程技术网

Javascript 连字符和下划线不能是连续的,但可以多次出现在字符串中

Javascript 连字符和下划线不能是连续的,但可以多次出现在字符串中,javascript,regex,special-characters,regex-negation,Javascript,Regex,Special Characters,Regex Negation,我有一个要求,我必须在Excel中验证一个字段 验证: 字段应以[a-zA-Z0-9]开头和结尾,但不得以任何特殊字符开头和结尾[-\] 它不能连续多次包含“-”和“u”。 示例: A--Badasd(不允许) A_uubsdasdas(不允许) A-\u fdsfdsd(不允许) A_uu-sfsdfsdf(不允许) A-B-adf(允许) A_b_adads(允许) 我提出了下面的正则表达式,但是,它似乎不接受“-”和“\ux”的非连续条目 [\xFF01-\xFF5E]不允许使用任何双宽

我有一个要求,我必须在Excel中验证一个字段

验证:
  • 字段应以
    [a-zA-Z0-9]
    开头和结尾,但不得以任何特殊字符开头和结尾
    [-\]
  • 它不能连续多次包含“-”和“u”。
    示例:
    A--Badasd
    (不允许)
    A_uubsdasdas
    (不允许)
    A-\u fdsfdsd
    (不允许)
    A_uu-sfsdfsdf
    (不允许)
    A-B-adf
    (允许)
    A_b_adads
    (允许)
  • 我提出了下面的正则表达式,但是,它似乎不接受“-”和“\ux”的非连续条目

    [\xFF01-\xFF5E]
    不允许使用任何双宽度字符,因此请忽略它,因为它工作正常


    任何帮助都会非常可观。

    我只能建议一种基于前瞻的模式(因为
    [\xFF01-\xFF5E]
    匹配
    在JS regex中限制它会使模式更麻烦):

    此模式也将匹配长度为1个字符的字符串,并且仅匹配以ASCII字母数字字符开头和结尾的字符串,这些字符串中没有
    -
    -
    -
    -

    如果要“阻止”长度为1的字符串,即将最小匹配长度设置为2,则应从上述模式中删除
    (?:
    )?

    /^[a-z0-9](?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9]$/i
    
    详细信息

    • ^
      -字符串的开头
    • [a-z0-9]
      -字母数字ASCII字符
    • (?:(?!*?[-\u]{2})[\xFF01-\xFF5E-]*[a-z0-9])?
      -可选的(1次或0次)序列:
      • (?!*?[-[u]{2})
        -如果在任何0+字符(换行符除外)之后的任何位置有两个连续的
        -
        -
        字符,则前瞻检查将使匹配失败
      • [\xFF01-\xFF5E-]*
        -范围内或/和
        -
      • [a-z0-9]
        -字母数字ASCII字符
    • $
      -字符串结束

    我只能建议一种基于前瞻的模式(因为
    [\xFF01-\xFF5E]
    匹配
    \u
    并且在JS regex中限制它会使模式更麻烦):

    此模式也将匹配长度为1个字符的字符串,并且仅匹配以ASCII字母数字字符开头和结尾的字符串,这些字符串中没有
    -
    -
    -
    -

    如果要“阻止”长度为1的字符串,即将最小匹配长度设置为2,则应从上述模式中删除
    (?:
    )?

    /^[a-z0-9](?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9]$/i
    
    详细信息

    • ^
      -字符串的开头
    • [a-z0-9]
      -字母数字ASCII字符
    • (?:(?!*?[-\u]{2})[\xFF01-\xFF5E-]*[a-z0-9])?
      -可选的(1次或0次)序列:
      • (?!*?[-[u]{2})
        -如果在任何0+字符(换行符除外)之后的任何位置有两个连续的
        -
        -
        字符,则前瞻检查将使匹配失败
      • [\xFF01-\xFF5E-]*
        -范围内或/和
        -
      • [a-z0-9]
        -字母数字ASCII字符
    • $
      -字符串结束

    。或者允许使用1个字符字符串,非常感谢,这是一个整洁的字符串。工作得很有魅力!见下面我的答案。如果它对你有用,请考虑接受。或者允许使用1个字符字符串,非常感谢,这是一个整洁的字符串。工作得很有魅力!见下面我的答案。请考虑接受,如果它为你工作。这工作就像一个魅力,但是,我去了你提出的第一个建议,甚至阻止单char字符串。只是为了在数据验证部分更加严格……是的,这些要求应该在问题本身中公布。但是您可以只删除
    (?:
    和最后一个
    )?
    ,它还将“阻止”1字符字符串。我添加了长度为2的字符串的模式变化,直到答案。这就像一个符咒,但是,我同意你提出的第一个建议,它甚至可以阻止单个字符字符串。只是为了在数据验证部分更加严格……是的,这些要求应该在问题本身中公布。但是您可以只删除
    (?:
    和最后一个
    )?
    ,它还将“阻止”1字符字符串。我添加了长度为2的字符串的模式变化,直到答案。
    /^[a-z0-9](?!.*?[-_]{2})[\xFF01-\xFF5E-]*[a-z0-9]$/i