質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

1446閲覧

「特定の文字種を1文字以上含む」という正規表現を書きたい

momokoko

総合スコア38

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2023/02/06 17:02

実現したいこと

特殊文字が一文字以上入力がされているか判定したく以下のような正規表現を書きました。

しかしうまく動いてくれず(他の正規表現は動いているのでコード自体は問題ないです)
正規表現が誤っております。
ネットで調べたんですが何が間違いかわからず、、ご教授頂けたらと幸いです。

let pattern = "^(?=.*[#?!$&@%+/^:,()~-]){1,20}$"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

特殊文字というのが#?!$&@%+/^:,()~-のどれかだとすると、

let pattern = "[#?!$&@%+/^:,()~-]"

で宜しいのではないでしょうか。
わざわざ肯定先読みを使う必要性はないように見えます。

以上の回答は「特殊文字が一文字以上入力がされているか判定」という質問文の文言を一切の忖度なく解釈した結果に依ります。文字数制限など、質問に書いてない別の条件があるなら、適切に質問文を修正してください。そうでなければ、上記のシンプルな正規表現で充分のはずです。

投稿2023/02/06 17:26

編集2023/02/07 06:27
KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momokoko

2023/02/07 13:14 編集

ありがとうございます! ネットの文法をコピペする内にややこしい正規表現になっておりました。。 今回で初めて先読みを知ることができました、ありがとうございました。
退会済みユーザー

退会済みユーザー

2023/02/07 13:47

質問者さん> 質問の正規表現にあった {1,20} は何だったのでしょうか?
guest

0

任意の文字 1 文字以上、20 文字以下で構成され、その中に #?!$&@%+/^:,()~- という文字を最低 1 文字を含むという条件で、質問者さんのコードの「正の先読み」を使うのであれば、正規表現は以下のようにすればよさそうです。

let pattern = "^(?=.*[#?!$&@%+/^:,()~-]).{1,20}$"

質問者さんのコードの {1,20} の前に任意の文字を表す . を追加しただけです。お試しください。

ちなみに上の正規表現を分解すると以下の意味になります。

^ 開始のアンカー (?=.*[#?!$&@%+/^:,()~-]) [] 内の文字が最低 1 文字あること .{1,20} 任意の文字が 1 ~ 20 文字 $ 終了のアンカー

投稿2023/02/07 01:11

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momokoko

2023/02/07 13:16

こんばんは! ご回答ありがとうございます! 「.」がなかったんですね。。 いただいた文法でビルドしたところ無事思い通りの挙動になりました! ありがとうございました。。!
guest

0

ググってみましたが、
「部分一致」の正規表現についてこのように書くようです。

"a"を含む場合
^(?=.*a).*$

したがって以下のようになるかと思います。
^(?=.*[#?!$&@%+/^:,()~-]).*$

投稿2023/02/06 17:34

dtn8kp6s

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momokoko

2023/02/07 13:17

こんばんは! ありがとうございます!! いただいた文法で思い通りの挙動になっておりました。。! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問