是否可以编写一个匹配所有不仅包含数字的字符串的正则表达式?如果我们有这些字符串:
abc
a4c
4bc
ab4
123
它应该匹配前四个,但不是最后一个 . 我试图在RegexBuddy中用前瞻和东西摆弄,但我似乎无法弄明白 .
(?!^\d+$)^.+$
这表示不包含所有数字并与整行匹配的行的前瞻 .
除非我遗漏了什么,否则我认为最简洁的正则表达式是......
/\D/
...或者换句话说,字符串中是否有一个非数字?
/^\d*[a-z][a-z\d]*$/
可以是开头的数字,然后至少一个字母,然后是字母或数字
jjnguy在earlier revision中使其正确(如果略微多余) .
.*?[^0-9].*
@Chad,你的正则表达式,
\b.*[a-zA-Z]+.*\b
应该允许非字母(例如,标点符号),即使Svish的例子不包括一个 . Svish的主要要求是:并非所有都是数字 .
\b.*[^0-9]+.*\b
然后,你不需要那里,因为你需要的是保证在那里有一个非数字(更多可能在那里,由两端的 . *覆盖) .
\b.*[^0-9].*\b
接下来,您可以取消两端的\ b,因为这些是不必要的约束(调用对alphanum和_的引用) .
.*[^0-9].*
最后,请注意,最后一个正则表达式表明问题可以通过基础知识解决,这些基础知识已经存在了几十年(例如,不需要预见功能) . 在英语中,问题在逻辑上等同于简单地要求在字符串中找到1个反例示例字符 .
我们可以在浏览器中测试这个正则表达式,方法是将以下内容复制到位置栏中,将字符串“6576576i7567”替换为您要测试的内容 .
javascript:alert(new String("6576576i7567").match(".*[^0-9].*"));
试试这个:
/^.*\D+.*$/
如果有任何simbol,它返回true,这不是数字 . 适用于所有语言 .
由于您说“ match ”,而不仅仅是验证,以下正则表达式将正确匹配
通过测试:
abc a4c 4bc ab4 1b1 11b b11
测试失败:
如果你想匹配至少有一个字母但是它们是由数字和字母(或只是字母)组成的世界,这就是我用过的东西:
(\d*[a-zA-Z]+\d*)+
如果我们想限制有效字符以便字符串可以由一组有限的字符组成,请尝试以下方法:
(?!^\d+$)^[a-zA-Z0-9_-]{3,}$
要么
(?!^\d+$)^[\w-]{3,}$
/ \ w /:匹配任何字母,数字或下划线 . 任何单词字符
.*[^0-9]{1,}.*
对我们来说很好 .
我们想要使用已使用的答案,但它在YANG模型中不起作用 .
我在这里提供的那个很容易理解,很明显:开始和结束可能是任何字符,但是,但必须至少有一个非数字字符,这是最好的 .
我在我的JavaScript代码中使用 /^[0-9]*$/gm 来查看字符串是否只是数字 . 如果是,那么它应该失败,否则它将返回字符串 .
/^[0-9]*$/gm
下面是带有测试用例的工作代码片段:
function isValidURL(string) { var res = string.match(/^[0-9]*$/gm); if (res == null) return string; else return "fail"; }; var testCase1 = "abc"; console.log(isValidURL(testCase1)); // abc var testCase2 = "a4c"; console.log(isValidURL(testCase2)); // a4c var testCase3 = "4bc"; console.log(isValidURL(testCase3)); // 4bc var testCase4 = "ab4"; console.log(isValidURL(testCase4)); // ab4 var testCase5 = "123"; // fail here console.log(isValidURL(testCase5));
我不得不在MySQL和以下内容中做类似的事情,而过度简化似乎对我有用:
其中fieldname regexp ^[a-zA-Z0-9]+$ 和fieldname NOT REGEXP ^[0-9]+$
^[a-zA-Z0-9]+$
^[0-9]+$
这将显示所有字母和字母数字字段,但隐藏任何仅为数字的字段 . 这似乎有效 .
例:
name1 - 显示名称 - 显示name2 - 显示name3 - 显示name4 - 显示n4ame - 显示324234234 - 未显示
11 回答
这表示不包含所有数字并与整行匹配的行的前瞻 .
除非我遗漏了什么,否则我认为最简洁的正则表达式是......
...或者换句话说,字符串中是否有一个非数字?
可以是开头的数字,然后至少一个字母,然后是字母或数字
jjnguy在earlier revision中使其正确(如果略微多余) .
@Chad,你的正则表达式,
应该允许非字母(例如,标点符号),即使Svish的例子不包括一个 . Svish的主要要求是:并非所有都是数字 .
然后,你不需要那里,因为你需要的是保证在那里有一个非数字(更多可能在那里,由两端的 . *覆盖) .
接下来,您可以取消两端的\ b,因为这些是不必要的约束(调用对alphanum和_的引用) .
最后,请注意,最后一个正则表达式表明问题可以通过基础知识解决,这些基础知识已经存在了几十年(例如,不需要预见功能) . 在英语中,问题在逻辑上等同于简单地要求在字符串中找到1个反例示例字符 .
我们可以在浏览器中测试这个正则表达式,方法是将以下内容复制到位置栏中,将字符串“6576576i7567”替换为您要测试的内容 .
试试这个:
如果有任何simbol,它返回true,这不是数字 . 适用于所有语言 .
由于您说“ match ”,而不仅仅是验证,以下正则表达式将正确匹配
通过测试:
测试失败:
如果你想匹配至少有一个字母但是它们是由数字和字母(或只是字母)组成的世界,这就是我用过的东西:
如果我们想限制有效字符以便字符串可以由一组有限的字符组成,请尝试以下方法:
要么
/ \ w /:匹配任何字母,数字或下划线 . 任何单词字符
对我们来说很好 .
我们想要使用已使用的答案,但它在YANG模型中不起作用 .
我在这里提供的那个很容易理解,很明显:开始和结束可能是任何字符,但是,但必须至少有一个非数字字符,这是最好的 .
我在我的JavaScript代码中使用
/^[0-9]*$/gm
来查看字符串是否只是数字 . 如果是,那么它应该失败,否则它将返回字符串 .下面是带有测试用例的工作代码片段:
我不得不在MySQL和以下内容中做类似的事情,而过度简化似乎对我有用:
其中fieldname regexp
^[a-zA-Z0-9]+$
和fieldname NOT REGEXP^[0-9]+$
这将显示所有字母和字母数字字段,但隐藏任何仅为数字的字段 . 这似乎有效 .
例:
name1 - 显示
名称 - 显示
name2 - 显示
name3 - 显示
name4 - 显示
n4ame - 显示
324234234 - 未显示