我正在使用正则表达式验证字符串(“ -test-”)在字符串的开头和结尾是否包含hypens(-)。因此,我找到了一个正则表达式来限制正则表达式开始和结束处的连字符。
/^(?!-)[a-zA-Z0-9-' ]+[^-]$/i
当字符串包含多个带有或不带有连字符的char(“ aa”)时,此正则表达式正在按预期进行验证。但是当我只传递一个没有连字符的字符串(“ a”)时,它就无法按预期工作。
这些还需要允许特殊字符和字母数字字符,例如“ $ abcd&”。需要在字符串的开头和结尾处重新调整oly hypen。
你们能帮忙吗?。
答案 0 :(得分:2)
您使用的模式匹配的字符串至少包含2个字符,因为[a-zA-Z0-9-' ]+
需要1个字符才能匹配,而[^-]
需要另一个字符。
您可以修改前瞻以使以-
结尾的字符串也失败:
/^(?!-)(?!.*-$).+$/
^^^^^^^^
请参见regex demo
详细信息
^
-字符串的开头(?!-)(?!.*-$)
-如果字符串以-
开头或以-
结尾的否定超前匹配失败.+
-除换行符以外的任何1个或多个字符(使用[\s\S]
来匹配任何字符)$
-字符串的结尾。此模式的展开版本为
^[^-]+(?:-+[^-]+)*$
详细信息
^
-字符串的开头[^-]+
-除-
之外的1个或多个字符(?:-+[^-]+)*
-0个以上的序列
-+
-1个以上的连字符[^-]+
-除-
之外的1个或多个字符$
-字符串的结尾。答案 1 :(得分:1)
要允许任何字符,但只能在开始和结束处禁止连字符:
^(?!-).*[^-]$
^
start的字符串(?!-)
look ahead(如果没有连字符).*
与any amount的any character匹配[^-]
匹配一个字符,that is not连字符$
最后