簡體   English   中英

只允許用戶在 Rails 中輸入字母和數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM