我想使用這個正則運算式/^[a-zA-Z0-9 ]*$/
但有條件:
- 單詞必須以字母開頭,不能以數字開頭
- 不允許特殊字符
我嘗試過使用另一種方法/[a-z]*$/i,但它似乎不起作用。任何幫助都會非常有幫助。
uj5u.com熱心網友回復:
您可以將正則運算式重新修改為
/\A(?:[a-zA-Z][a-zA-Z0-9 ]*)?\z/
如果空格是特殊字符,請將其從正則運算式中洗掉。
請注意,在 Ruby 中,字串的開頭與 匹配,\A字串的結尾與 匹配\z。
詳情:
\A- 字串的開始(?:[a-zA-Z][a-zA-Z0-9 ]*)?- 一個可選的序列[a-zA-Z]- 一個 ASCII 字母[a-zA-Z0-9 ]*- 零個或多個空格、ASCII 字母或數字\z- 字串結束。
uj5u.com熱心網友回復:
已經很好的答案了,雖然我會將整個a-zA-Z事情改為在正則運算式上a-z帶有一個i標志,只是更簡潔。
另一種選擇,我個人覺得更有表現力,是使用類似的東西:
str.starts_with? /[a-z]/i and not str.match /[^a-z0-9]/i
最后,我想知道您是否也希望允許非 ASCII 字母字符,例如 é 或其他什么?在這種情況下,您想使用[:alpha:]并[:alnum:]喜歡這樣:
str.starts_with? /[[:alpha:]]/ and not str.match /[^[:alnum:]]/
uj5u.com熱心網友回復:
您還可以使用否定的前瞻來斷言字串開頭不是數字或空格。
使用不區分大小寫的匹配:
re = /\A(?:[a-zA-Z][a-zA-Z0-9 ]*)?\z/i
解釋
\A字串的開始(?![\d ])負前瞻,不直接在右側斷言空格或數字[a-z\d ]*可選擇重復匹配任何列出的\z字串結束
請參閱正則運算式 rubular 演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/505633.html
