簡體   English   中英

匹配字符串中至少 1 個數字和 1 個字符的正則表達式模式

[英]Regex pattern to match at least 1 number and 1 character in a string

我有一個正則表達式

/^([a-zA-Z0-9]+)$/

這只允許字母數字,但如果我只插入數字或字符,那么它也接受它。 我希望它像該字段一樣工作,應該只接受字母數字值,但該值必須至少包含 1 個字符和 1 個數字。

為什么不先應用整個測試,然后為字符和數字添加單獨的測試? 無論如何,如果您想在一個正則表達式中完成所有操作,請使用正向前瞻:

/^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$/

此 RE 將執行以下操作:

/^(?:[0-9]+[a-z]|[a-z]+[0-9])[a-z0-9]*$/i

RE的解釋:

  • 匹配以下任意一項:
    1. 至少一個數字,然后是一個字母
    2. 至少一個字母,然后一個數字
  • 任何剩余的數字和字母

  • (?:...)創建一個未引用的組
  • /i忽略大小寫標志,因此az == a-zA-Z

我可以看到其他響應者已經為您提供了完整的解決方案。 正則表達式的問題在於它們可能難以維護/理解。

一個更簡單的解決方案是保留您現有的正則表達式,然后創建兩個新的正則表達式來測試您的“至少一個字母”和“至少一個數字”。

因此,對此進行測試:-

/^([a-zA-Z0-9]+)$/

然后這個:-

/\d/

然后這個:-

/[A-Z]/i

如果您的字符串通過了所有三個正則表達式,您就有了所需的答案。

雖然接受的答案是正確的,但我發現這個正則表達式更容易閱讀:

REGEX = "([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*"

此解決方案接受至少 1 個數字和至少 1 個字符:

[^\w\d]*(([0-9]+.*[A-Za-z]+.*)|[A-Za-z]+.*([0-9]+.*))

接受的答案不起作用,因為它不允許輸入特殊字符。

它對我來說非常完美。

^(?=.*[0-9])(?=.*[a-zA-Z])(?=\\S+$).{6,20}$

  • 一位數必須
  • 一個字符必須(小寫或大寫)
  • 所有其他可選的東西

謝謝你。

還有一個帶有否定檢查的想法。

/^(?!\d*$|[a-z]*$)[a-z\d]+$/i
  • ^(?!在開始時向前看,如果字符串沒有
  • \\d*$只包含數字| 或者
  • [az]*$只包含字母
  • [az\\d]+$匹配一個或多個字母或數字,直到$結束。

看看這個 regex101 演示

i標志打開無殼匹配az匹配a-zA-Z

也許有點晚了,但這是我的 RE:

/^(\\w*(\\d+[a-zA-Z]|[a-zA-Z]+\\d)\\w*)+$/

解釋:

\\w* -> 0 個或多個字母數字,在開頭

\\d+[a-zA-Z]|[a-zA-Z]+\\d -> 一個數字+一個字母或一個字母+一個數字

\\w* -> 0 或更多字母數字,再次

我希望這是可以理解的

簡單地說:

/[0-9][a-zA-Z]|[a-zA-Z][0-9]/

對我來說就像一個魅力......

編輯以下評論:

好吧,我深夜的一些短視:對於給您帶來的不便深表歉意...

這個——不完整的——潛在的想法是,只需要一個從數字到 alpha 或從 alpha 到數字的“過渡”來回答這個問題。

但是下一個正則表達式應該為僅由字母數字字符組成的字符串完成工作:

/^[0-9a-zA-Z]*([0-9][a-zA-Z]|[a-zA-Z][0-9])[0-9a-zA-Z]*$/

其中Javascript可以進一步簡化為:

/^[0-9a-z]*([0-9][a-z]|[a-z][0-9])[0-9a-z]*$/i

在恕我直言中,閱讀和理解比其他一些答案(沒有回溯等)更直接。

希望這可以幫助。

如果您需要將數字放在任何單詞的末尾,這對我有用:

/\b([a-zA-Z]+[0-9]+)\b/g
  • \\b 詞邊界
  • [a-zA-Z] 任意字母
  • [0-9] 任意數字
  • “+”無限搜索(顯示所有結果)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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