正则表达式可在字符串的开头和结尾验证hypen(-)

时间:2018-08-27 10:08:19

标签: javascript php jquery regex

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

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

当字符串包含多个带有或不带有连字符的char(“ aa”)时,此正则表达式正在按预期进行验证。但是当我只传递一个没有连字符的字符串(“ a”)时,它就无法按预期工作。

这些还需要允许特殊字符和字母数字字符,例如“ $ abcd&”。需要在字符串的开头和结尾处重新调整oly hypen。

你们能帮忙吗?。

2 个答案:

答案 0 :(得分:2)

您使用的模式匹配的字符串至少包含2个字符,因为[a-zA-Z0-9-' ]+需要1个字符才能匹配,而[^-]需要另一个字符。

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

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

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?!-)(?!.*-$)-如果字符串以-开头或以-结尾的否定超前匹配失败
  • .+-除换行符以外的任何1个或多个字符(使用[\s\S]来匹配任何字符)
  • $-字符串的结尾。

此模式的展开版本为

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

请参见this regex demo

详细信息

  • ^-字符串的开头
  • [^-]+-除-之外的1个或多个字符
  • (?:-+[^-]+)*-0个以上的序列
    • -+-1个以上的连字符
    • [^-]+-除-之外的1个或多个字符
  • $-字符串的结尾。

答案 1 :(得分:1)

要允许任何字符,但只能在开始和结束处禁止连字符:

^(?!-).*[^-]$

See demo at regex101