gpt4 book ai didi

javascript - 正则表达式 - 不允许名称以连字符结尾

转载 作者:行者123 更新时间:2023-11-28 13:01:47 25 4
gpt4 key购买 nike

我正在尝试使用 javascript 创建一个正则表达式,该正则表达式将允许诸如 abc-def 之类的名称,但不允许 abc-(连字符也是唯一允许的非字母字符)

名称必须至少包含 2 个字符。我开始于^[a-zA-Z-]{2,}$,但这还不够好,所以我正在尝试这样的事情^([A-Za-z]{2,})+(-[A-Za-z]+)*$

名称中可以包含多个 -,但绝不能以 - 开头或结尾。

它允许像 xx-x 这样的名称,但不允许像 x-x 这样的名称。我希望实现 x-x 也被接受,但 x- 不被接受。

谢谢!

最佳答案

选项 1

此选项匹配以字母开头和结尾的字符串,并确保两个 - 不连续,因此像 a--a 这样的字符串无效。要允许这种情况,请参阅选项 2

^[a-z]+(?:-?[a-z]+)+$
  • ^ 断言位置位于行首
  • [a-z]+ 匹配任何小写 ASCII 字母一次或多次(使用 i 标志,这也匹配大写变体)
  • (?:-?[a-z]+)+ 匹配以下一次或多次
    • -? 可选择匹配 -
    • [a-z]+ 匹配任何 ASCII 字母(带 i 标志)
  • $ 断言位置位于行尾

var a = [
"aa","a-a","a-a-a","aa-aa-aa","aa-a", // valid
"aa-a-","a","a-","-a","a--a" // invalid
]
var r = /^[a-z]+(?:-?[a-z]+)+$/i

a.forEach(function(s) {
console.log(`${s}: ${r.test(s)}`)
})

<小时/>

选项 2

如果您想匹配像 a--a 这样的字符串,那么您可以使用以下正则表达式:

^[a-z]+[a-z-]*[a-z]+$

var a = [
"aa","a-a","a-a-a","aa-aa-aa","aa-a","a--a", // valid
"aa-a-","a","a-","-a" // invalid
]
var r = /^[a-z]+[a-z-]*[a-z]+$/i

a.forEach(function(s) {
console.log(`${s}: ${r.test(s)}`)
})

关于javascript - 正则表达式 - 不允许名称以连字符结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49737119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com