Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 我需要一个唯一的正则表达式,该正则表达式至少需要大写字母,并且不允许+;以及任何形式的空白_Regex - Fatal编程技术网

Regex 我需要一个唯一的正则表达式,该正则表达式至少需要大写字母,并且不允许+;以及任何形式的空白

Regex 我需要一个唯一的正则表达式,该正则表达式至少需要大写字母,并且不允许+;以及任何形式的空白,regex,Regex,我把它分解成两个,但我想知道是否可以用一个 我的两个正则表达式 /^[^\s+ ]+$/ /(.*[a-zA-Z].*)/ 为什么不能两者兼而有之 ^(?=.*[a-zA-Z])[^\s+]+$ 使用前瞻 ^(?=.*[a-zA-Z])[^\s+]+$ ^ start of regex (?=.*[a-zA-Z]) make sure there is at least a letter ahead

我把它分解成两个,但我想知道是否可以用一个

我的两个正则表达式

/^[^\s+ ]+$/

/(.*[a-zA-Z].*)/
为什么不能两者兼而有之

^(?=.*[a-zA-Z])[^\s+]+$ 
使用前瞻

^(?=.*[a-zA-Z])[^\s+]+$
^                        start of regex
 (?=.*[a-zA-Z])          make sure there is at least a letter ahead
               [^\s+]+   make every character is not a plus or any whitespace character
                      $  end of regex
请注意,我是如何将您的
[^\s+]
更改为我的
[^\s+]
,因为
\s
已经包含了空格(U+0020)。

为什么两者都不包括

^(?=.*[a-zA-Z])[^\s+]+$ 
使用前瞻

^(?=.*[a-zA-Z])[^\s+]+$
^                        start of regex
 (?=.*[a-zA-Z])          make sure there is at least a letter ahead
               [^\s+]+   make every character is not a plus or any whitespace character
                      $  end of regex
请注意,我是如何将您的
[^\s+]
更改为我的
[^\s+]
,因为
\s
已包含空格(U+0020)。

您可以使用

/^[^+\s]*[a-z][^+\s]*$/i

模式匹配:

  • ^
    -字符串的开头
  • [^+\s]*
    -除
    +
    和空白外,零个或多个字符
  • [a-z]
    -字母(不区分大小写-请参见
    /i
    修饰符)
  • [^+\s]*
    -除
    +
    和空白外,零个或多个字符
  • $
    -字符串结尾
此表达式只需要一个字母,字母两侧可以有空格和加号以外的任意数量的字符。

您可以使用

/^[^+\s]*[a-z][^+\s]*$/i

模式匹配:

  • ^
    -字符串的开头
  • [^+\s]*
    -除
    +
    和空白外,零个或多个字符
  • [a-z]
    -字母(不区分大小写-请参见
    /i
    修饰符)
  • [^+\s]*
    -除
    +
    和空白外,零个或多个字符
  • $
    -字符串结尾

此表达式只需要一个字母,字母两边可以有空格和加号以外的任意数量的字符。

试试这个。我不知道你说的“独特”是什么意思,不过:


试试这个。我不知道你说的“独特”是什么意思,不过:


/^[^+\s]*[a-z][^+\s]*$/i
/^[^+\s]*[a-z][^+\s]*$/i这是我的解决方案(只是没有修饰符)。@WiktorStribiżew Uhm,我们同时写下了答案,只有一种体面的方法可以做到这一点。。。我避免使用修饰符,因为它通常更快地匹配特定的字符范围(我相信在许多正则表达式引擎中)。4分钟的差异不是同时发生的。不管怎样,随你的便。@Wiktor,我的电脑说你们的答案相差不到一分钟。别那么生气,有些人打字比其他人慢。@WiktorStribiżew我可以证明我的正则表达式足够流利,复制你的答案实际上比给出诚实的答案需要我付出更多的努力。此外,答案不会在键入时立即显示,因此我不会在那里监视页面,等待“窃取”答案。别那么防御性。这是我的解决方案(只是没有修改)。@WiktorStribiżew-Uhm,我们同时写下了答案,只有一个体面的方法可以做到这一点。。。我避免使用修饰符,因为它通常更快地匹配特定的字符范围(我相信在许多正则表达式引擎中)。4分钟的差异不是同时发生的。不管怎样,随你的便。@Wiktor,我的电脑说你们的答案相差不到一分钟。别那么生气,有些人打字比其他人慢。@WiktorStribiżew我可以证明我的正则表达式足够流利,复制你的答案实际上比给出诚实的答案需要我付出更多的努力。此外,答案不会在键入时立即显示,因此我不会在那里监视页面,等待“窃取”答案。不要表现得那么防御性。长相头并不总是受支持的。MySQL、RE2、XML模式风格不支持先行。不总是支持先行。MySQL、RE2、XML模式风格不支持前瞻。