2017-03-20 4 views
-2

英数字可能にするために、私は、以下の条件を満たす正規表現を探しています:スウィフト:正規表現1つの必須数字

  • 英数字は、最小値と最大値の制限で許可されています。

  • 少なくとも1つの数字は必須です。

+0

の終わりに位置をアサート制限スタックオーバーフローへようこそ!最初に[ツアー(http://stackoverflow.com/tour)に参加して[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)を学んで[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例(最高はプレイグラウンドコードスニペットになります)。 – muescha

+0

あなたが探している文字列と探しているパターンの種類の両方の例を提供していれば、より正確な答えを得るのに役立ちます。質問が今立つと、「必須番号は特定の位置になければならないか」、「英数字はいくつまで許可されていますか」といったような質問をします。だからもっと多くの情報が必要です。 – Fahim

答えて

0

あなたがパターン[a-zA-Z0-9]を使用して文字列内の英数字の数を制限し、{8,13}を使用して最小値と最大値の出現を制限することができます。

は^文字列

の開始位置をアサート

let regex = "^(?=.*\\d)(?=.*\\D)([a-zA-Z0-9]{8,13})$" 

正規表現の詳細:あなたはまた、数字(?=.*\\d)と非数字(?=.*\\D)のための肯定先読みパターンをやって少なくとも一桁があることを確認することができます

(?=。* \ d)? の数字

の任意の文字に一致する先読み任意の文字に一致

(?=。* \ D)•肯定先読みはthatsの 非桁

任意の英数字の文字に一致し

([a-zA-Z0-9]は)•最初のキャプチャグループ

{8,13}•(8〜13)precidingトークンの出現が

$文字列

let string = "abcdefg1" 

if let range = string.range(of: regex, options: .regularExpression) { 
    print(string[range]) // abcdefg1\n" 
} 
関連する問題