我的正則運算式用于驗證名字和姓氏。可接受的形式如下:
- 雅各布·威爾曼
- 威爾曼,雅各布
- 威爾曼,雅各布韋恩
- 奧肖內西,杰克 L.
- 約翰·奧肖內西-史密斯
- 金
不可接受的形式如下:
- 蒂米·奧肖內西
- 約翰·奧肖內西——史密斯
- K3vin 馬龍
- 警報(“你好”)
- 從用戶中選擇*;
我目前的正則運算式如下。
^[\w'\-,.][^0-9_!??÷??\\ =@#$%?&*(){}|~<>;:[\]]{2,}$
它適用于驗證所有名稱,除了:
- 蒂米·奧肖內西
- 約翰·奧肖內西——史密斯
這樣做的原因是正則運算式沒有考慮連續的相同特殊字符。如何更改我的正則運算式以將這些考慮在內?
uj5u.com熱心網友回復:
您可以通過使用負前瞻和反向參考來排除連續的字符,以斷言不是直接跟隨相同字符的字符 ^(?!.*([’-])\1
請注意,您當前的模式匹配至少 3 個字母長的名稱,并且不會匹配例如名稱 Al
如果你也想匹配它,你可以在模式中更改{2,}為 。
^(?!.*([’-])\1)[\w',.-][^\n\r0-9_!??÷?\\ =@#$%?&*(){}|~<>;:[\]]{2,}$
正則運算式演示
匹配名字可能很困難,這個頁面有一個關于名字的有趣讀物:
程式員相信名字的謊言
uj5u.com熱心網友回復:
^(:?[^0-9'\-\., _!??÷??\\ =@#$%?&*(){}|~<>;:[\]] (:?['-]|, | |\.|\. |$)) $
我使用了您的禁用字符集并添加了'\-\., . 然后我讓他們重復 。我插入一組允許的除數:(:?['-]|, | |\.|\. |$)并允許重復此模式 。
我在這里試過了。
uj5u.com熱心網友回復:
您可以在驗證之前單獨進行。使用 Perl 正則運算式,要洗掉額外的特殊字符,它將是:
s/(\W)\1 /$1/g
例如:
$ echo "John O’’Shaughnessy--Smith" | perl -C -pe 's/(\W)\1 /$1/g'
John O’Shaughnessy-Smith
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365056.html
上一篇:在PHP中使用日期的操作
