我正在尋找一個解決方案,我匹配一個沒有 2 個或更多空格的字串。我已經檢查了多個答案,他們給出了字串有多個空格的字串,但我想要相反的(abc bb)是我的匹配字串 not (abc bb or abc bb etc)。
這是我的驗證碼
/^([A-Za-z0-9\_\- ] ){5,255}$/
我要檢查的長度應該是 5 到 255 個字符長,并且可以只有字母、數字、-(連字符)、_(下劃線)或空格。
** 中間沒有多個空格的字串不應該是有效匹配。
abc bb => match
abcd => match
bbv => match
abc bb => not match
abc bb => not match
abc bb => not match
Thanks
uj5u.com熱心網友回復:
您可以將模式撰寫為以下之一:
^(?=.{5,255}$) *[A-Za-z0-9_-] (?: [A-Za-z0-9_-] )* *$
^(?=.{5,255}$) *[\w-] (?: [\w-] )* *$
例如,第一個模式匹配:
^字串的開始(?=.{5,255}$)正向前瞻,斷言 5 - 255 個字符*匹配可選空格[A-Za-z0-9_-]匹配任何列出的 1 次以上(沒有空格)(?: [A-Za-z0-9_-] )*可選擇使用前導單個空格重復前一個*匹配可選空格$字串結束
正則運算式演示
如果兩者之間最多只能有 1 次空格,則可以將非捕獲組的量詞從更改為*:?
^(?=.{5,255}$) *[A-Za-z0-9_-] (?: [A-Za-z0-9_-] )? *$
示例代碼
$strings = [
"abc bb",
"abcd ",
" bbv ",
" abc bb ",
"abc bb",
"abc bb"
];
$pattern = "/^(?=.{5,255}$) *[A-Za-z0-9_-] (?: [A-Za-z0-9_-] )* *$/";
foreach ($strings as $s) {
if (preg_match($pattern, $s)) {
echo "Match for: [$s]" . PHP_EOL;
} else {
echo "No match for: [$s]" . PHP_EOL;
}
}
輸出
Match for: [abc bb]
Match for: [abcd ]
Match for: [ bbv ]
No match for: [ abc bb ]
No match for: [abc bb]
No match for: [abc bb]
uj5u.com熱心網友回復:
你可以試試:
^(?!.*?\S .*? .*?\S)[\w -]{5,255}$
查看在線演示
^- 起跑線錨;(?!.*?\S .*? .*?\S)- 負前瞻,以防止任何行在非空白字符之間有兩個空格字符;[\w -]{5,255}- 匹配任何單詞字符、空格或連字符 5-255 次;$- 端線錨。
或者可能:
.*?\S .*? .*?\S(*SKIP)(*F)|^[\w -]{5,255}$
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/416991.html
標籤:
上一篇:Laravel無法加載正確的外鍵
