当前位置: 首页 > 知识库问答 >
问题:

正则表达式在字符串的开始和结束时验证hypen(-)

顾琛
2023-03-14

我正在使用正则表达式验证字符串(“-test-”)的开头和结尾是否包含hypens(-)。所以我找到了一个正则表达式来限制正则表达式开始和结束时的催眠。

/^(?!-)[a-zA-Z0-9-' ]+[^-]$/i

当字符串包含多个带有或不带有hypen的字符(“aa”)时,该正则表达式按预期进行了验证。但是当我在没有hypen的情况下简单地传递一个字符串(“a”)时,它并没有像预期的那样工作。

此外,还需要允许特殊字符和字母数字字符,如“$abcd”

你们能帮忙吗...

共有2个答案

卢志强
2023-03-14

允许任何字符,但只禁止在开始和结束时使用连字符:

^(?!-).*[^-]$
  • ^字符串的开头
  • (?!-)如果没有连字符,请向前看
  • <代码>* 匹配任意数量的任意字符
  • [^-]匹配一个字符,该字符不是连字符
  • $最后

请参阅regex101上的演示

海景曜
2023-03-14

您拥有的模式匹配至少由2个字符组成的字符串,因为[a-zA-Z0-9-']需要1个字符来匹配,而[^-]需要另一个字符。

您可以修改lookahead,使以-结尾的字符串也失败:

/^(?!-)(?!.*-$).+$/
       ^^^^^^^^

查看正则表达式演示

细节

  • ^-字符串的开头
  • (?!-)(?!.*-$)-如果字符串以-开头或以-
  • 结尾,则会失败匹配的负查找头
  • -除换行符之外的任何1个或多个字符(使用[\s\S]匹配任何字符)
  • $-字符串结束。

此模式的展开版本为

^[^-]+(?:-+[^-]+)*$

查看此正则表达式演示

细节

  • ^-字符串的开头

 类似资料:
  • 我试图将字符串的起始字符和结束字符匹配为同一个元音。我的正则表达式在大多数情况下都能工作,但在其他情况下会失败: 样本输入: ,输出-false(有效) ,输出-true(有效) ,输出为true(有效) ,输出-true(无效) ,输出-true(无效)

  • 关于正则表达式有很多类似的问题,但我仍然对以下情况感到困惑:

  • 我有一个表单,我想限制第一个和最后一个字符。(javascript)限制是: 输入必须以字母数字开始和结束,而不是下划线,字母数字之间只允许下划线 示例: 我尝试创建我的正则表达式如下: 这不允许在开头加下划线,这很好,但允许在我想要限制的结尾加下划线。 这里缺少任何输入。 谢谢 ---更新--- 我在angularjs应用程序中使用正则表达式。 我已将我的指令创建为: 我在我的html中使用它作

  • 相比较于第一章变量的声明,这一章的内容有了一点深度提升,但还不至于很难理解。本章主要讲2个知识点,字符串、正则表达式 字符串 字符串(String)是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symbol(es6新增)。 字符串类型在前端开发者,是使用最频繁的类型之一,网站上可见的各种文案,几乎都是字符串类型的数据。我们经常需要

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 本文向大家介绍JS正则表达式验证中文字符,包括了JS正则表达式验证中文字符的使用技巧和注意事项,需要的朋友参考一下 正则表达式:"^[\u4e00-\u9fa5]{0,}$" 、 "/^[\u4E00-\u9FA5]{1,5}$/" 的含义: 在JS里,\uXXXX 是转义字符,"XXXX"对应的是16进制Unicode编码; ^ 匹配一行的开始。例如正则表达式^123能够匹配字符串"12345"