Regex 正则表达式:如何匹配不仅仅是数字的字符串

Regex 正则表达式:如何匹配不仅仅是数字的字符串,regex,Regex,是否可以编写一个正则表达式来匹配不仅包含数字的所有字符串?如果我们有这些字符串: abc a4c 4bc ab4 123 它应该首先匹配四个,但不是最后一个。我曾试着在RegexBuddy里摆弄一些头像之类的东西,但我似乎不明白 /^\d*[a-z][a-z\d]*$/ 开头可能是一个数字,然后至少是一个字母,然后是字母或数字,除非我遗漏了什么,否则我认为最简洁的正则表达式是 /\D/ …或者换句话说,字符串中是否没有数字 (?!^\d+$)^.+$ 这表示对不包含所有数字且与整行匹配

是否可以编写一个正则表达式来匹配不仅包含数字的所有字符串?如果我们有这些字符串:

  • abc
  • a4c
  • 4bc
  • ab4
  • 123
它应该首先匹配四个,但不是最后一个。我曾试着在RegexBuddy里摆弄一些头像之类的东西,但我似乎不明白

/^\d*[a-z][a-z\d]*$/

开头可能是一个数字,然后至少是一个字母,然后是字母或数字,除非我遗漏了什么,否则我认为最简洁的正则表达式是

/\D/
…或者换句话说,字符串中是否没有数字

(?!^\d+$)^.+$
这表示对不包含所有数字且与整行匹配的行进行前瞻。

因为您说了“匹配””,而不仅仅是验证,下面的正则表达式将正确匹配

\b.*[a-zA-Z]+.*\b
通过测试:

abc
a4c
4bc
ab4
1b1
11b
b11
123
测试失败:

abc
a4c
4bc
ab4
1b1
11b
b11
123
jjnguy在一个应用程序中使用了正确的(如果稍微冗余的话)

,你的正则表达式

\b.*[a-zA-Z]+.*\b
即使Svish的示例中没有包含非字母(例如标点符号),也应该考虑非字母。Svish的主要要求是:并非所有数据都是数字

\b.*[^0-9]+.*\b
然后,您不需要+在那里,因为您所需要的是保证1个非数字在那里(更多可能在那里,由结尾的。*所涵盖)

接下来,您可以在任意一端删除\b,因为这些是不必要的约束(调用对alphanum和x的引用)

最后,请注意,最后一个正则表达式表明,这个问题只需要一些基础知识就可以解决,这些基础知识已经存在了几十年(例如,不需要前瞻功能)。在英语中,这个问题在逻辑上等同于简单地要求在字符串中找到1个反例字符

我们可以在浏览器中测试这个正则表达式,方法是将以下内容复制到位置栏中,将字符串“6576576i7567”替换为您想要测试的任何内容

javascript:alert(new String("6576576i7567").match(".*[^0-9].*"));

如果要限制有效字符,以便可以从有限的字符集生成字符串,请尝试以下操作:

(?!^\d+$)^[a-zA-Z0-9_-]{3,}$

/\w+/: 匹配任何字母、数字或下划线。任何单词字符都可以尝试以下操作:

/^.*\D+.*$/

如果有任何simbol,则返回true,该simbol不是数字。适用于所有语言。

如果您试图匹配至少有一个字母但由数字和字母(或仅字母)组成的世界,我使用的是:

(\d*[a-zA-Z]+\d*)+
对我们来说很好

我们希望使用使用的答案,但它在杨模型中不起作用

我在这里提供的内容很容易理解,而且很清楚:
开始和结束可以是任何字符,但必须至少有一个非数字字符,这是最大的。

我在JavaScript代码中使用
/^[0-9]*$/gm
来查看字符串是否只是数字。如果是,那么它应该失败,否则它将返回字符串

下面是使用测试用例的工作代码段:

函数isValidURL(字符串){
var res=string.match(/^[0-9]*$/gm);
如果(res==null)
返回字符串;
其他的
返回“失败”;
};
var testCase1=“abc”;
console.log(isvalidull(testCase1));//abc
var testCase2=“a4c”;
console.log(isvalidul(testCase2));//a4c
var testCase3=“4bc”;
console.log(isvalidul(testCase3));//公元前4年
var testCase4=“ab4”;
console.log(isvalidul(testCase4));//ab4
var testCase5=“123”//在这里失败

console.log(isvalidull(testCase5))我不得不在MySQL中做一些类似的事情,下面的内容虽然过于简化,但似乎对我有效:

其中fieldname regexp
^[a-zA-Z0-9]+$
而字段名不是REGEXP
^[0-9]+$

这将显示所有按字母和字母数字排列的字段,但隐藏所有仅为数字的字段。这似乎奏效了

例如:

名称1-显示
名称-显示
名称2-已显示
名称3-已显示
名称4-显示
n4ame-已显示

324234234-未显示

如果字符串中有一个数字,则此操作将失败see@Svish当前位置你的陈述毫无意义,我说了。这与不包含数字的字符串不匹配。它匹配不是数字的单个字母。如果我把它放在a^和a$之间匹配一个字符串,它只匹配我的第一个测试字符串。好吧,这两个字符串的行为略有不同,你可以在我的ruby代码中看到:
code=['abc'、'a4c'、'4bc'、'ab4'、'123']
code.map{code>code.match(/\D/)}
=>{| code | code.match(/(?!^\d+$)^.+$/)}
=>[#,#,#,#,nil]
匹配数据的
/\D/
返回第一个字母,而匹配的mote complex one返回示例中的整个代码。总之,除非出于某种原因,您需要对匹配的数据执行操作,否则它们似乎都是同样可用的。这基本上就是我的结论:)所以…基本上您是up与/\D/的复杂表达式。no\D与我的不同,因为它只匹配非数字。当进行匹配时,mine返回包含整个字符串的匹配,而just\D可以是每行多个匹配。My regex返回4个匹配,而\D返回17个匹配(对于每个非数字).@Mike Cheel我明白了。如果这就是Svish想要的,从他的问题中肯定不清楚。但我明白这怎么可能是有利的。@Daniel,从我的问题中怎么不清楚?我甚至有5个例子,其中我标记了我想要匹配的字符串…@Jin,视情况而定,
[a-zA-Z]
\D
不同
\D
不是一个数字。因此,如果他们实际上不需要0-9,并且标点符号也可以,那么是的,
\D
会更准确。不确定为什么有人编辑了它,但没有真正更改任何内容,然后在解决方案完美运行时将其标记下来。(我自己实施)
/^.*\D+.*$/
(\d*[a-zA-Z]+\d*)+
.*[^0-9]{1,}.*