我正在尝试创建regex,其中用户必须输入完全相同的东西,而不是额外的。
这是我的regex;/[a-zA-Z0-9][a-zA-Z0-9\-]*\.myshopify\.com/
例如,当我用myshop.myshopify.coma测试时,它返回true或myshop.myshopify.com myshop123.myshopify.com仍然返回true。
我想得到的是,如果用户输入myshop.myshopify.coma或myshop321.myshopify.com myshop123.myshopify.coma,则不应该匹配。
只有当整个输入与()=>%$ etc.myshopify.com完全相同时,它才应该匹配
在我的regex中应该包含什么来严格地测试一件事情。
发布于 2021-01-16 06:18:39
您可以使用边界型断言来匹配输入(^)和结束($)的开头,以确保输入完全匹配。
const pattern = /^[a-zA-Z0-9][a-zA-Z0-9\-]*\.myshopify\.com$/
console.log(pattern.test('myshop.myshopify.com')) // true
console.log(pattern.test('myshop.myshopify.coma')) // false
console.log(pattern.test('myshop.myshopify.com myshop123.myshopify.com')) // false
发布于 2021-01-16 08:10:26
你现在可以像“A--”这样的输入,所以除了开始和结束线锚的好点,你可能需要重新考虑你的模式。也许是这样:
^[a-z\d]+(?:-[a-z\d]+)*\.myshopify\.com$请参阅在线演示
^ -启动线锚.[a-z\d]+ - 1+任何alnum字符.(?: -开放非捕获组:-[a-z\d]+ -一个文字连字符,后面跟着1+ alnum。)* -关闭非捕获组并匹配0次或多次。\.myshopify\.com -匹配一个".myshopify.com“字面意思。$端线锚.第二个选择是使用负面展望来实现同样的概念:
^(?!-|.*-[-.])[a-z\d-]+\.myshopify\.com$请参阅在线演示
^ -启动线锚.(?! -负展望:- -一种主要的催眠| -或:.*-[-.] -除了换行符0或更多次以外的任何字符,直到使用另一个下线或文字点的下划线。) -关闭负前瞻。[a-zA-Z\d]+ - 1+任何alnum字符.\.myshopify\.com -匹配一个".myshopify.com“字面意思。$端线锚.在这两种情况下,我都使用了全局和不区分大小写的标志:/<pattern>/gi。见下面的样本:
const patt1 = /^[a-z\d]+(?:-[a-z\d]+)*\.myshopify\.com$/gi
console.log(patt1.test('myshop.myshopify.com'))
console.log(patt1.test('myshop-.myshopify.com'))
const patt2 = /^(?!-|.*-[-.])[a-z\d-]+\.myshopify\.com$/gi
console.log(patt2.test('myshop.myshopify.com'))
console.log(patt2.test('myshop-.myshopify.com'))
https://stackoverflow.com/questions/65746962
复制相似问题