[英]Allow users to enter letters and numbers only in Rails
我想使用這個正則表達式/^[a-zA-Z0-9 ]*$/
但有條件:
我嘗試過使用另一種方法/[az]*$/i
但它似乎不起作用。 任何幫助都會非常有幫助。
您可以將正則表達式重新修改為
/\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
- 字符串結束。已經很好的答案了,盡管我會將整個a-zA-Z
更改為僅在正則表達式上帶有i
標志的az
,更簡潔。
另一種選擇,我個人覺得更有表現力,是使用類似的東西:
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:]]/
您還可以使用否定的前瞻來斷言字符串開頭不是數字或空格。
使用不區分大小寫的匹配:
re = /\A(?:[a-zA-Z][a-zA-Z0-9 ]*)?\z/i
解釋
\A
字符串開頭(?![\d ])
負前瞻,不直接斷言右邊的空格或數字[az\d ]*
可選擇重復匹配任何列出的\z
字符串結束請參閱正則表達式 rubular 演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.