Regex 用于验证同时包含数字和非数字字符的字符串的正则表达式

Regex 用于验证同时包含数字和非数字字符的字符串的正则表达式,regex,validation,Regex,Validation,有谁能帮我弄一个正则表达式,我可以用它来验证字符串是否同时包含数字和非数字字符 我正在使用“\d+\d+”,但它不起作用。我拥有的测试用例有: a1 1a a1b 1ab ab1 1-2 12- -12 我列出的测试用例应该都是匹配的。我使用的是javascript RegExp.test(),因此999或asdf或+sdf不匹配。您可以尝试使用: .**(?=.*\d)(?=.*\d)* 但也许你甚至不需要正则表达式?根据您使用的语言/工具,您可能可以执行以下操作: 让您的输入字符串为s

有谁能帮我弄一个正则表达式,我可以用它来验证字符串是否同时包含数字和非数字字符

我正在使用
“\d+\d+”
,但它不起作用。我拥有的测试用例有:

a1
1a
a1b
1ab
ab1
1-2
12-
-12

我列出的测试用例应该都是匹配的。我使用的是javascript RegExp.test(),因此999或asdf或+sdf不匹配。

您可以尝试使用:

.**(?=.*\d)(?=.*\d)*
但也许你甚至不需要正则表达式?根据您使用的语言/工具,您可能可以执行以下操作:

  • 让您的输入字符串为
    s
    。如果
    s
    为空,则它无效
  • 如果
    s
    的第一个字符是数字:
    • 循环浏览
      s
      的其他字符,直到找到一个非数字。如果找不到非数字,
      s
      无效
  • 否则:
    • 循环浏览
      s
      的其他字符,直到找到一个数字。如果找不到数字,
      s
      无效
  • 如果找到合适的数字/非数字,
    s
    有效
您可以尝试使用:

.**(?=.*\d)(?=.*\d)*
但也许你甚至不需要正则表达式?根据您使用的语言/工具,您可能可以执行以下操作:

  • 让您的输入字符串为
    s
    。如果
    s
    为空,则它无效
  • 如果
    s
    的第一个字符是数字:
    • 循环浏览
      s
      的其他字符,直到找到一个非数字。如果找不到非数字,
      s
      无效
  • 否则:
    • 循环浏览
      s
      的其他字符,直到找到一个数字。如果找不到数字,
      s
      无效
  • 如果找到合适的数字/非数字,
    s
    有效

当前正则表达式只匹配一个或多个数字的字符串,后跟一个或多个非数字。您可以使用前瞻性检查是否存在数字:

"(?=.*\d).*\D.*"
(?=.*\d)
部分的意思是“在此之后的某个地方,必须有零个或多个后跟数字的字符”。这允许数字出现在字符串中的任何位置


*\D.*
部分的意思是“匹配任何字符的零个或多个,然后是一个非数字,然后是任何字符的零个或多个”,这将匹配字符串中任何位置的一个非数字及其周围的其余字符(数字或非数字)。

当前正则表达式只匹配一个或多个数字的字符串,后跟一个或多个非数字。您可以使用前瞻性检查是否存在数字:

"(?=.*\d).*\D.*"
(?=.*\d)
部分的意思是“在此之后的某个地方,必须有零个或多个后跟数字的字符”。这允许数字出现在字符串中的任何位置

*\D.*
部分的意思是“匹配任何字符的零个或多个,然后是一个非数字,然后是任何字符的零个或多个”,这将匹配字符串中任何位置的一个非数字及其周围的其余字符(数字或非数字)。

这对我来说很有用。 它是匹配1|匹配2其中|表示

(\d+[a-zA-Z]+|[a-zA-Z]+\d+)
这对我有用。 它是匹配1|匹配2其中|表示

(\d+[a-zA-Z]+|[a-zA-Z]+\d+)

通过数字和非数字,如果您指的是(任何非数字字符),则可以使用字符类
\d
表示数字,而
\d
表示
[^\d]
。不过,这里没有必要四处看看。如果你指的是一个数字和一个字母,你可以使用下面的句子。我正在分解你的字符串以进行比较字符串。我使用带有
|
运算符的组来允许字母前加数字,反之亦然

<?php

$string = 'a1 1a a1b 1ab ab1 1-2 12- -12';
$strings = explode(' ',$string);

$pattern = '!([0-9][A-Za-z]|[A-Za-z][0-9])!';

foreach($strings as $tempString){
   if(preg_match($pattern,$tempString)){
      echo "$tempString matches\n";   
   } else {
      echo "$tempString doesn't match\n";      
   }
}


?>
如果我们更改为
\d\d
字符类,则所有内容都匹配

$pattern = '!(\d\D|\D\d)!';
输出

a1 matches
1a matches
a1b matches
1ab matches
ab1 matches
1-2 doesn't match
12- doesn't match
-12 doesn't match
a1 matches
1a matches
a1b matches
1ab matches
ab1 matches
1-2 matches
12- matches
-12 matches

通过数字和非数字,如果您指的是(任何非数字字符),则可以使用字符类
\d
表示数字,而
\d
表示
[^\d]
。不过,这里没有必要四处看看。如果你指的是一个数字和一个字母,你可以使用下面的句子。我正在分解你的字符串以进行比较字符串。我使用带有
|
运算符的组来允许字母前加数字,反之亦然

<?php

$string = 'a1 1a a1b 1ab ab1 1-2 12- -12';
$strings = explode(' ',$string);

$pattern = '!([0-9][A-Za-z]|[A-Za-z][0-9])!';

foreach($strings as $tempString){
   if(preg_match($pattern,$tempString)){
      echo "$tempString matches\n";   
   } else {
      echo "$tempString doesn't match\n";      
   }
}


?>
如果我们更改为
\d\d
字符类,则所有内容都匹配

$pattern = '!(\d\D|\D\d)!';
输出

a1 matches
1a matches
a1b matches
1ab matches
ab1 matches
1-2 doesn't match
12- doesn't match
-12 doesn't match
a1 matches
1a matches
a1b matches
1ab matches
ab1 matches
1-2 matches
12- matches
-12 matches

您使用的是什么正则表达式引擎/环境(如果有)?每个测试用例的结果应该是什么?您使用什么命令(如果适用)调用regex?请提供有效和无效字符串的示例。另外,没有人知道他们之间的区别。很简单。如果:
^(?=\D*\D)(?=\D*\D)
匹配,那么就可以了。我列出的测试用例都应该是匹配的。我使用的是javascript RegExp.test(),因此999或asdf或wf+sdf不匹配。谢谢大家!您使用的是什么正则表达式引擎/环境(如果有)?每个测试用例的结果应该是什么?您使用什么命令(如果适用)调用regex?请提供有效和无效字符串的示例。另外,没有人知道他们之间的区别。很简单。如果:
^(?=\D*\D)(?=\D*\D)
匹配,那么就可以了。我列出的测试用例都应该是匹配的。我使用的是javascript RegExp.test(),因此999或asdf或wf+sdf不匹配。谢谢大家!先生,你不是一个魔术师,可以从
a1 1a a1b 1ab ab1 1-2 12--12
中分辨出需要哪种图案。。。如果不知道什么是无效的,就没有验证。
1a a1b 1ab ab1 1-2 12--12
是否有效?@dognose在重新设置列表格式后,“验证字符串是否同时包含数字和非数字字符”,请参阅。我认为这应该是一种模式。@arshajii——这就是