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
但也许你甚至不需要正则表达式?根据您使用的语言/工具,您可能可以执行以下操作:
- 让您的输入字符串为
。如果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——这就是