是否可以编写一个匹配所有不仅包含数字的字符串的正则表达式?如果我们有这些字符串:
它应该匹配前四个,但不是最后一个.我试图在RegexBuddy中用前瞻和东西摆弄,但我似乎无法弄明白.
Mik*_*eel 42
(?!^\d+$)^.+$
Run Code Online (Sandbox Code Playgroud)
这表示不包含所有数字并与整行匹配的行的前瞻.
Dan*_*age 12
除非我遗漏了什么,否则我认为最简洁的正则表达式是......
/\D/
Run Code Online (Sandbox Code Playgroud)
...或者换句话说,字符串中是否有一个非数字?
/^\d*[a-z][a-z\d]*$/
Run Code Online (Sandbox Code Playgroud)
可以是开头的数字,然后至少一个字母,然后是字母或数字
jjnguy在早期版本中对它进行了更正(如果稍微冗余).
.*?[^0-9].*
Run Code Online (Sandbox Code Playgroud)
@Chad,你的正则表达式,
\b.*[a-zA-Z]+.*\b
Run Code Online (Sandbox Code Playgroud)
应该允许非字母(例如,标点符号),即使Svish的例子不包括一个.Svish的主要要求是:并非所有都是数字.
\b.*[^0-9]+.*\b
Run Code Online (Sandbox Code Playgroud)
然后,你不需要+ in,因为你需要的只是保证在那里有一个非数字(更多可能在那里,由两端的.*覆盖).
\b.*[^0-9].*\b
Run Code Online (Sandbox Code Playgroud)
接下来,您可以取消两端的\ b,因为这些是不必要的约束(调用对alphanum和_的引用).
.*[^0-9].*
Run Code Online (Sandbox Code Playgroud)
最后,请注意,最后一个正则表达式表明问题可以通过基础知识解决,这些基础知识已经存在了几十年(例如,不需要预见功能).在英语中,问题在逻辑上等同于简单地要求在字符串中找到1个反例示例字符.
我们可以在浏览器中测试这个正则表达式,方法是将以下内容复制到位置栏中,将字符串"6576576i7567"替换为您要测试的内容.
javascript:alert(new String("6576576i7567").match(".*[^0-9].*"));
Run Code Online (Sandbox Code Playgroud)