javascript - 连字符和下划线永远不应该是连续的,但可以在字符串中多次出现

标签 javascript regex special-characters regex-negation

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

验证:

  1. 字段应以 [a-zA-Z0-9] 开头和结尾,但不得以任何特殊字符 [-_]
  2. 不能连续多次包含“-”和“_”。
    示例:
    A--Badasd(不允许)
    A__Bsdasdas(不允许)
    A-_fdsfdsd(不允许)
    A_-sfsdfsdf(不允许)
    A-B-adf(允许)
    A_b_adads(允许)

我想出了以下正则表达式,但是,它似乎甚至不接受不连续的“-”和“_”条目。

^[a-zA-z0-9]+(([\xFF01-\xFF5E]+|[\\-\\_])+)[a-zA-Z0-9]+$

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

任何帮助将不胜感激。

最佳答案

我只能建议基于前瞻的模式(因为 [\xFF01-\xFF5E] 匹配 _ 并且在 JS 正则表达式中限制它将使模式更加麻烦):

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

请参阅regex demo .

此模式也将匹配 1 个字符长度的字符串,并且仅匹配以 ASCII 字母数字字符开头和结尾且不包含 --_- 的字符串>、-___ 其中。

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

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

详细信息

  • ^ - 字符串开头
  • [a-z0-9] - 字母数字 ASCII 字符
  • (?:(?!.*?[-_]{2})[\xFF01-\xFF5E_-]*[a-z0-9])? - 可选 (1或 0 次出现)的序列:
    • (?!.*?[-_]{2}) - 前向检查,如果有 2 个连续的 -,则匹配失败_ 除换行符之外的任何 0 个以上字符之后的任意位置
    • [\xFF01-\xFF5E-]* - \xFF01-\xFF5E 范围内的任何字符或/和 -<
    • [a-z0-9] - 字母数字 ASCII 字符
  • $ - 字符串结尾。

关于javascript - 连字符和下划线永远不应该是连续的,但可以在字符串中多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46233558/

相关文章:

javascript - 无法将 search() 与可变模式一起使用

php - 如何从 URL 获取视频 ID? (每日运动)

PHP PDO 数据库错误特殊字符

javascript - 字符 JavaScript

javascript - 移动浏览器和 JavaScript

python - 使用 regex sub (Python) 复制字符串中的数字

javascript - 当 PHP 内联到 html(或其他 Web 文件)中时会发生什么?

r - 如何计算R中的第二个单词字符串

javascript - jquery 1.10.2批量选择复选框,回调错误?

javascript - 如何使用 javascript 获取滚动条宽度(在最新的 chrome 中)