【发布时间】:2016-07-21 07:50:57
【问题描述】:
我必须编写一个匹配如下的正则表达式:
- 字符串应以字母开头 - [a-zA-Z]
- 字符串可以包含字母、空格、数字、
_和-(下划线和连字符) - 字符串不应以
_或-(下划线和连字符)结尾 - 下划线字符前后不能有空格。
我想出了以下正则表达式,但它似乎不起作用
/^[a-zA-Z0-9]+(\b_|_\b)[a-zA-Z0-9]+$/
测试用例:
HelloWorld // Match
Hello_World //Match
Hello _World // doesn't match
Hello_ World // doesn't match
Hello _ World // doesn't match
Hello_World_1 // Match
He110_W0rld // Match
Hello - World // Match
Hello-World // Match
_HelloWorld // doesn't match
Hello_-_World // match
【问题讨论】:
-
在这种情况下的第一步:构建具有所需输出的测试字符串数组。这既能让其他人更清楚,也能让你自动测试任何正则表达式。
-
“但它似乎不起作用”您还可以使用您的正则表达式发布给出错误答案的字符串吗?
-
试试
/^[a-zA-Z][a-zA-Z0-9_\-]+[a-zA-Z0-9]$/ -
这不清楚:第 4 个条件没有意义,因为前 3 个条件意味着字符串中根本没有空格。我会使用
^[a-zA-Z][a-zA-Z0-9_-]*[a-zA-Z0-9]$,或者,如果应该匹配 1 个字符输入,^(?!.*[_-]$)[a-zA-Z][a-zA-Z0-9_-]*$ -
"字符串应该以字母开头" 第一个回复:
[a-zA-Z0-9]...您需要真正考虑更多。
标签: javascript regex