国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用正則表達(dá)式判斷日期字符串格式是否合法遇到的問(wèn)題(解決)

這篇具有很好參考價(jià)值的文章主要介紹了使用正則表達(dá)式判斷日期字符串格式是否合法遇到的問(wèn)題(解決)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

引言

我們?cè)谑褂肧pringMVC從前端接受傳遞過(guò)來(lái)的日期數(shù)據(jù)時(shí),默認(rèn)傳遞過(guò)來(lái)的數(shù)據(jù)是String類型,如果我們從前端傳遞過(guò)來(lái)的數(shù)據(jù)格式是yyyy/MM/dd,SpringMVC有內(nèi)置類型轉(zhuǎn)化器會(huì)將String類型自動(dòng)轉(zhuǎn)化成Date類型。但如果我們從前端傳遞過(guò)來(lái)的數(shù)據(jù)格式是yyyy-MM-dd,SpringMVC的內(nèi)置轉(zhuǎn)化器就不能自動(dòng)轉(zhuǎn)化了,就得我們自定義一個(gè)類型轉(zhuǎn)化器。

注意:如果我們自定義類型轉(zhuǎn)化器之后,SpringMVC支持內(nèi)置類型轉(zhuǎn)化器就不會(huì)在生效了。

創(chuàng)建自定義字符串類型轉(zhuǎn)日期類型的類型轉(zhuǎn)化器類

package com.qrj.converter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.GenericConversionService;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;

/**
 * @author: qrj
 * @description 自定義字符串類型轉(zhuǎn)日期類型的類型轉(zhuǎn)換器
 * @Date: 2023/9/29 16:41
 */
public class StringToDateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        Date date = null;
        try{
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            date = simpleDateFormat.parse(s);
        }catch (Exception e){
            e.printStackTrace();
        }
        return date;
    }
}

我們一個(gè)在類型轉(zhuǎn)化器類里面寫(xiě)一個(gè)main方法進(jìn)行測(cè)試,看能不能將yyyy-MM-dd格式的字符串轉(zhuǎn)化成Date類型的數(shù)據(jù)。

public static void main(String[] args) {
        //創(chuàng)建類型轉(zhuǎn)換服務(wù)實(shí)例
        GenericConversionService genericConversionService = new GenericConversionService();
        //想類型轉(zhuǎn)換服務(wù)實(shí)例中注冊(cè)自定義類型轉(zhuǎn)換器
        genericConversionService.addConverter(new StringToDateConverter());
        //使用自定義類型轉(zhuǎn)換器
        String dateStr = "2023-9-29";
        Date date = genericConversionService.convert(dateStr,Date.class);
        System.out.println(date);
}

測(cè)試結(jié)果如下:

使用正則表達(dá)式判斷日期字符串格式是否合法遇到的問(wèn)題(解決)

測(cè)試成功,自定義類型轉(zhuǎn)化器可以將yyyy-MM-dd格式的字符串轉(zhuǎn)化成Date類型的數(shù)據(jù)。

但問(wèn)題來(lái)咯!有自定義類型轉(zhuǎn)化器之后,SpringMVC支持內(nèi)置類型轉(zhuǎn)化器就不會(huì)在生效。如果我們前端數(shù)據(jù)傳一個(gè)yyyy/MM/dd格式的日期呢???

解決這個(gè)問(wèn)題,我們是不是應(yīng)該進(jìn)行一個(gè)判斷,這里正則表達(dá)式就出場(chǎng)咯。如果前端傳遞過(guò)來(lái)的是yyyy-MM-dd格式的字符串,就將它轉(zhuǎn)化為Date類型,如果前端傳遞過(guò)來(lái)的是yyyy/MM/dd格式的字符串,也將它轉(zhuǎn)化為Date類型。

用正則表達(dá)式判斷日期字符串是否合法

package com.qrj.converter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.GenericConversionService;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;

/**
 * @author: qrj
 * @description 自定義字符串類型轉(zhuǎn)日期類型的類型轉(zhuǎn)換器
 * @Date: 2023/9/29 16:41
 */
public class StringToDateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        Date date = null;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try{
            //可以使用正則表達(dá)式判斷日期字符串格式是否合法(支持 yyyy-MM-dd 和 yyyy/MM/dd 格式)
            boolean isMate1 = Pattern.matches("^(\\d{4})-(\\d{2})-(\\d{2})$",s);
            if (isMate1 == true){
                simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            }
            boolean isMate2 = Pattern.matches("^(\\d{4})/(\\d{2})/(\\d{2})$",s);
            if (isMate2 == true){
               simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
            }
            date = simpleDateFormat.parse(s);
        }catch (Exception e){
            e.printStackTrace();
        }
        return date;
    }
}

注意:上面Pattern.matches()方法是Java中用于檢查給定字符串是否與給定模式匹配的靜態(tài)方法。它接受兩個(gè)參數(shù):第一個(gè)參數(shù)是表示正則表達(dá)式模式的字符串,第二個(gè)參數(shù)是待檢查的字符串。

編寫(xiě)測(cè)試代碼,進(jìn)行測(cè)試:

//測(cè)試自定義類型轉(zhuǎn)換器
    public static void main(String[] args) {
        //創(chuàng)建類型轉(zhuǎn)換服務(wù)實(shí)例
        GenericConversionService genericConversionService = new GenericConversionService();
        //想類型轉(zhuǎn)換服務(wù)實(shí)例中注冊(cè)自定義類型轉(zhuǎn)換器
        genericConversionService.addConverter(new StringToDateConverter());
        //使用自定義類型轉(zhuǎn)換器
        String dateStr = "2023/9/29";
        Date date = genericConversionService.convert(dateStr,Date.class);
        System.out.println(date);
}

測(cè)試結(jié)果如下:

使用正則表達(dá)式判斷日期字符串格式是否合法遇到的問(wèn)題(解決)

報(bào)錯(cuò)原因是無(wú)法解析的date :"2023/9/29"?

遇到問(wèn)題

在網(wǎng)上查詢資料得知,原因是在 SimpleDateFormat中使用的日期格式與實(shí)際的日期字符串格式不匹配,導(dǎo)致無(wú)法解析。在"2023/9/29"這種格式的日期字符串中,月份部分只有一位數(shù)字,日期部分有兩位數(shù)字,而在正則表達(dá)式中(\\d{2})日期和月份部分匹配兩位數(shù)字。這使得2023/9/29與正則表達(dá)式不匹配,返回false,無(wú)法將2023/9/29這種格式的日期字符串解析。

解決問(wèn)題

為了解決這一問(wèn)題,可以通過(guò)修改正則表達(dá)式的月份跟日期部分為(\\d{1,2})使其匹配一到兩位數(shù)字。以下是修改后的代碼:

package com.qrj.converter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.GenericConversionService;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;

/**
 * @author: qrj
 * @description 自定義字符串類型轉(zhuǎn)日期類型的類型轉(zhuǎn)換器
 * @Date: 2023/9/29 16:41
 */
public class StringToDateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        Date date = null;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try{
            //可以使用正則表達(dá)式判斷日期字符串格式是否合法(支持 yyyy-MM-dd 和 yyyy/MM/dd 格式)
            boolean isMate1 = Pattern.matches("^(\\d{4})-(\\d{2})-(\\d{2})$",s);
            if (isMate1){
                simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            }
            boolean isMate2 = Pattern.matches("^(\\d{4})/(\\d{1,2})/(\\d{1,2})$",s);
            if (isMate2){
               simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
            }
            date = simpleDateFormat.parse(s);
        }catch (Exception e){
            e.printStackTrace();
        }
        return date;
    }

    //測(cè)試自定義類型轉(zhuǎn)換器
    public static void main(String[] args) {
        //創(chuàng)建類型轉(zhuǎn)換服務(wù)實(shí)例
        GenericConversionService genericConversionService = new GenericConversionService();
        //想類型轉(zhuǎn)換服務(wù)實(shí)例中注冊(cè)自定義類型轉(zhuǎn)換器
        genericConversionService.addConverter(new StringToDateConverter());
        //使用自定義類型轉(zhuǎn)換器
        String dateStr = "2023/9/29";
        String dateStr2 = "2023-9-30";
        Date date = genericConversionService.convert(dateStr,Date.class);
        Date date2 = genericConversionService.convert(dateStr2,Date.class);
        System.out.println(date);
        System.out.println(date2);
    }
}

進(jìn)行測(cè)試如下:

使用正則表達(dá)式判斷日期字符串格式是否合法遇到的問(wèn)題(解決)

成功將yyyy-MM-dd格式和yyyy/MM/dd格式的字符串轉(zhuǎn)化成Date類型的數(shù)據(jù)。

正則表達(dá)式

"^(\\d{4})-(\\d{2})-(\\d{2})$"
"^(\\d{4})/(\\d{1,2})/(\\d{1,2})$"

^:匹配字符串的開(kāi)頭

(\\d{4}):匹配四位數(shù)字,表示年份

-或/:匹配橫杠或斜杠字符

(\\d{1,2}):匹配一到兩位數(shù)字,表示月份或日期

$:匹配字符串的結(jié)尾文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-711979.html

到了這里,關(guān)于使用正則表達(dá)式判斷日期字符串格式是否合法遇到的問(wèn)題(解決)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用正則表達(dá)式 移除 HTML 標(biāo)簽后得到字符串

    使用正則表達(dá)式 移除 HTML 標(biāo)簽后得到字符串

    在上述代碼中,stripHTMLTags 函數(shù)使用正則表達(dá)式 /[^]+/g 來(lái)匹配所有的 HTML 標(biāo)簽,并使用空字符串進(jìn)行替換,從而將 HTML 標(biāo)簽移除。 最后,返回移除 HTML 標(biāo)簽后的字符串。

    2024年02月14日
    瀏覽(24)
  • 12.字符串和正則表達(dá)式

    正則表達(dá)式相關(guān)知識(shí) 在編寫(xiě)處理字符串的程序或網(wǎng)頁(yè)時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字符串的需要,正則表達(dá)式就是用于描述這些規(guī)則的工具,換句話說(shuō)正則表達(dá)式是一種工具,它定義了字符串的匹配模式(如何檢查一個(gè)字符串是否有跟某種模式匹配的部分或者從一個(gè)

    2024年01月16日
    瀏覽(29)
  • Java基礎(chǔ)十八(正則表達(dá)式 + 日期時(shí)間)

    1.1 普通字符 字符 描述 示例 [abc] 匹配 […] 中所有字符 [hlo] 匹配字符串 \\\"hello world\\\" 中所有的 h l o 字母 [^ABC] 匹配除了 […] 中所有字符 [hlo] 匹配字符串 \\\"hello world\\\" 中除了 h l o 的所有字母 [^a-z] 匹配除了 […] 中所有字符 [hlo] 匹配字符串 \\\"hello world\\\" 中除了 a 到 z 的所有字母 [A-

    2024年02月11日
    瀏覽(24)
  • python 正則表達(dá)式提取字符串

    python 正則表達(dá)式提取字符串

    1、提取字符串的場(chǎng)景及公式、命令 背景 :目前遇到的場(chǎng)景主要是以某個(gè)字符串開(kāi)始、某個(gè)字符串結(jié)束,提取中間部分的字符,有的時(shí)候需要開(kāi)始的字符,有時(shí)不需要,大概涉及到了4種情況,場(chǎng)景及處理方式如下: 1.1 以某個(gè)字符開(kāi)始、某個(gè)字符結(jié)束,期待的提取結(jié)果 包含

    2024年02月02日
    瀏覽(26)
  • notepad++ 正則表達(dá)式查找特定字符串

    批量文本的處理方法 在報(bào)文中有很多指標(biāo)和值都具有固定的格式,比如是? a=\\\"1\\\" 這類格式,那么我們只取前面的指標(biāo)a,就會(huì)比較復(fù)雜,而使用正則表達(dá)式就會(huì)快樂(lè)許多! 采用以下第二種方法 查找目標(biāo) =(.+?)\\\"? ? 表示查找以等號(hào)開(kāi)頭,引號(hào)和空格? 結(jié)尾的字符串,可以避免查

    2024年02月15日
    瀏覽(23)
  • java之字符串與正則表達(dá)式

    java之字符串與正則表達(dá)式

    目錄 String 構(gòu)造方法 注意 格式控制字符串 常用方法 StringBuilder與StringBuffer 特點(diǎn) 理解可變與不可變 字符串拼接方法 字符串刪除方法 字符串內(nèi)插入字符 字符串替換方法 字符串反轉(zhuǎn)方法 查字符串對(duì)應(yīng)索引處的字符? 截取字符串 正則表達(dá)式 正則表達(dá)式符號(hào)表 正則表達(dá)式常用方

    2023年04月22日
    瀏覽(25)
  • 【python】12.字符串和正則表達(dá)式

    【python】12.字符串和正則表達(dá)式

    正則表達(dá)式相關(guān)知識(shí) 在編寫(xiě)處理字符串的程序或網(wǎng)頁(yè)時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字符串的需要,正則表達(dá)式就是用于描述這些規(guī)則的工具,換句話說(shuō)正則表達(dá)式是一種工具,它定義了字符串的匹配模式(如何檢查一個(gè)字符串是否有跟某種模式匹配的部分或者從一個(gè)

    2024年01月16日
    瀏覽(20)
  • 正則表達(dá)式中 “$” 并不是表示 “字符串結(jié)束

    作者:Seth Larson 譯者:豌豆花下貓@Python貓 英文:Regex character “$” doesn\\\'t mean “end-of-string” 轉(zhuǎn)載請(qǐng)保留作者及譯者信息! 這篇文章寫(xiě)一寫(xiě)我最近在用 Python 的正則表達(dá)式模塊( re )開(kāi)發(fā) CPython 的 SBOM 工具時(shí)發(fā)現(xiàn)的一個(gè)令人驚訝的行為。 如果用過(guò)正則表達(dá)式,你可能知道 ^

    2024年04月15日
    瀏覽(26)
  • 【動(dòng)態(tài)規(guī)劃】【字符串】C++算法:正則表達(dá)式匹配

    【動(dòng)態(tài)規(guī)劃】【字符串】C++算法:正則表達(dá)式匹配

    視頻算法專題 動(dòng)態(tài)規(guī)劃匯總 字符串 給你一個(gè)字符串 s 和一個(gè)字符規(guī)律 p,請(qǐng)你來(lái)實(shí)現(xiàn)一個(gè)支持 ‘.’ 和 ‘ ’ 的正則表達(dá)式匹配。 ‘.’ 匹配任意單個(gè)字符 \\\' ’ 匹配零個(gè)或多個(gè)前面的那一個(gè)元素 所謂匹配,是要涵蓋 整個(gè) 字符串 s的,而不是部分字符串。 示例 1: 輸入:

    2024年02月03日
    瀏覽(38)
  • Python 自學(xué)(五) 之字符串及正則表達(dá)式

    Python 自學(xué)(五) 之字符串及正則表達(dá)式

    目錄 1. 字符串的分割合并? split()? join()? ? ? ? ?P132 2. 字符串的檢索? ?count() find() index() startswith() endswith()? ? ? ? ?P134 3. 去除空格和特殊字符? ?strip()? lstrip() rstrip()? ? ? ? ? P139 4. 格式化字符串? ?format()? ? ? ? ?P142 5. 字符串編碼轉(zhuǎn)換? encode()? decode()? ? ? ? P145

    2024年01月25日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包